迭代重命名列中相同特定值的第一次和第二次出现
Rename first and second occurence of the same specific value in a column iteratively
在此数据帧 df
的 1 列 X
中,值 a
出现多次:
数据框:
df <- structure(list(col = c("<NA>", "<NA>", "a", "<NA>", "<NA>", "<NA>",
"a", "<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "a", "<NA>", "<NA>",
"a", "<NA>", "<NA>", "a", "<NA>", "<NA>", "a", "<NA>")), class = "data.frame", row.names = c(NA,
-23L))
我想将第一个 a
重命名为 start
,将第二个 a
重命名为 end
,将下一个 a
重命名为 start
和下一个 a
作为 end
等等....
期望的输出:
df1 <- structure(list(col = c("<NA>", "<NA>", "start", "<NA>", "<NA>",
"<NA>", "end", "<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "start",
"<NA>", "<NA>", "end", "<NA>", "<NA>", "start", "<NA>", "<NA>",
"end", "<NA>")), class = "data.frame", row.names = c(NA, -23L
))
非常感谢!!!
利用 R 的回收利用 属性。
df$col[df$col == 'a'] <- c('start', 'end')
df
# col
#1 <NA>
#2 <NA>
#3 start
#4 <NA>
#5 <NA>
#6 <NA>
#7 end
#8 <NA>
#9 <NA>
#10 <NA>
#11 <NA>
#12 <NA>
#13 start
#14 <NA>
#15 <NA>
#16 end
#17 <NA>
#18 <NA>
#19 start
#20 <NA>
#21 <NA>
#22 end
#23 <NA>
其他解决方案选项
df <- structure(list(col = c("<NA>", "<NA>", "a", "<NA>", "<NA>", "<NA>",
"a", "<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "a", "<NA>", "<NA>",
"a", "<NA>", "<NA>", "a", "<NA>", "<NA>", "a", "<NA>")), class = "data.frame", row.names = c(NA,
-23L))
library(dplyr)
library(data.table)
df %>%
mutate(col = ifelse(col == "a" & data.table::rowid(col == "a") %% 2 == 0, "end", col))
#> col
#> 1 <NA>
#> 2 <NA>
#> 3 a
#> 4 <NA>
#> 5 <NA>
#> 6 <NA>
#> 7 end
#> 8 <NA>
#> 9 <NA>
#> 10 <NA>
#> 11 <NA>
#> 12 <NA>
#> 13 a
#> 14 <NA>
#> 15 <NA>
#> 16 end
#> 17 <NA>
#> 18 <NA>
#> 19 a
#> 20 <NA>
#> 21 <NA>
#> 22 end
#> 23 <NA>
setDT(df)[col == "a", col := ifelse(rowid(col) %% 2 == 0, "end", col)][]
#> col
#> 1: <NA>
#> 2: <NA>
#> 3: a
#> 4: <NA>
#> 5: <NA>
#> 6: <NA>
#> 7: end
#> 8: <NA>
#> 9: <NA>
#> 10: <NA>
#> 11: <NA>
#> 12: <NA>
#> 13: a
#> 14: <NA>
#> 15: <NA>
#> 16: end
#> 17: <NA>
#> 18: <NA>
#> 19: a
#> 20: <NA>
#> 21: <NA>
#> 22: end
#> 23: <NA>
#> col
由 reprex package (v2.0.0)
于 2021-04-19 创建
在此数据帧 df
的 1 列 X
中,值 a
出现多次:
数据框:
df <- structure(list(col = c("<NA>", "<NA>", "a", "<NA>", "<NA>", "<NA>",
"a", "<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "a", "<NA>", "<NA>",
"a", "<NA>", "<NA>", "a", "<NA>", "<NA>", "a", "<NA>")), class = "data.frame", row.names = c(NA,
-23L))
我想将第一个 a
重命名为 start
,将第二个 a
重命名为 end
,将下一个 a
重命名为 start
和下一个 a
作为 end
等等....
期望的输出:
df1 <- structure(list(col = c("<NA>", "<NA>", "start", "<NA>", "<NA>",
"<NA>", "end", "<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "start",
"<NA>", "<NA>", "end", "<NA>", "<NA>", "start", "<NA>", "<NA>",
"end", "<NA>")), class = "data.frame", row.names = c(NA, -23L
))
非常感谢!!!
利用 R 的回收利用 属性。
df$col[df$col == 'a'] <- c('start', 'end')
df
# col
#1 <NA>
#2 <NA>
#3 start
#4 <NA>
#5 <NA>
#6 <NA>
#7 end
#8 <NA>
#9 <NA>
#10 <NA>
#11 <NA>
#12 <NA>
#13 start
#14 <NA>
#15 <NA>
#16 end
#17 <NA>
#18 <NA>
#19 start
#20 <NA>
#21 <NA>
#22 end
#23 <NA>
其他解决方案选项
df <- structure(list(col = c("<NA>", "<NA>", "a", "<NA>", "<NA>", "<NA>",
"a", "<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "a", "<NA>", "<NA>",
"a", "<NA>", "<NA>", "a", "<NA>", "<NA>", "a", "<NA>")), class = "data.frame", row.names = c(NA,
-23L))
library(dplyr)
library(data.table)
df %>%
mutate(col = ifelse(col == "a" & data.table::rowid(col == "a") %% 2 == 0, "end", col))
#> col
#> 1 <NA>
#> 2 <NA>
#> 3 a
#> 4 <NA>
#> 5 <NA>
#> 6 <NA>
#> 7 end
#> 8 <NA>
#> 9 <NA>
#> 10 <NA>
#> 11 <NA>
#> 12 <NA>
#> 13 a
#> 14 <NA>
#> 15 <NA>
#> 16 end
#> 17 <NA>
#> 18 <NA>
#> 19 a
#> 20 <NA>
#> 21 <NA>
#> 22 end
#> 23 <NA>
setDT(df)[col == "a", col := ifelse(rowid(col) %% 2 == 0, "end", col)][]
#> col
#> 1: <NA>
#> 2: <NA>
#> 3: a
#> 4: <NA>
#> 5: <NA>
#> 6: <NA>
#> 7: end
#> 8: <NA>
#> 9: <NA>
#> 10: <NA>
#> 11: <NA>
#> 12: <NA>
#> 13: a
#> 14: <NA>
#> 15: <NA>
#> 16: end
#> 17: <NA>
#> 18: <NA>
#> 19: a
#> 20: <NA>
#> 21: <NA>
#> 22: end
#> 23: <NA>
#> col
由 reprex package (v2.0.0)
于 2021-04-19 创建