我在R中有一个数据框,我编辑的内容如下所示:
我想用'x'更改第2列中的单元格,以匹配x列表顶部的单词。例如,我希望第2行第8-20行列出单词“farm_working_expenses”,第2列第22-27行列出单词“feed_expenses”等。
有没有办法编辑数据框中的'x'单元格以匹配同一列中前一个单元格的内容?
答案 0 :(得分:0)
dplyr::na_if()
可用于将x
替换为NA
。
data1 <- data.frame(col1 = LETTERS[1:10],
col2 = c('val1',rep('x',3),'val2',rep('x',3),'val3','x'))
data1
# col1 col2
# 1 A val1
# 2 B x
# 3 C x
# 4 D x
# 5 E val2
# 6 F x
# 7 G x
# 8 H x
# 9 I val3
# 10 J x
data1$col2 <- dplyr::na_if(data1$col2, 'x')
使用tidyr::fill()
,可以继续进行最后一次观察,直到同一列中出现新值。
data1 %>% tidyr::fill(col2)
# col1 col2
# 1 A val1
# 2 B val1
# 3 C val1
# 4 D val1
# 5 E val2
# 6 F val2
# 7 G val2
# 8 H val2
# 9 I val3
# 10 J val3
zoo::na.locf
也可用于类似目的。
data1 <- data.frame(col1 = LETTERS[1:10],
col2 = c('val1',rep(NA,3),'val2',rep(NA,3),'val3',NA))
data1
# col1 col2
# 1 A val1
# 2 B <NA>
# 3 C <NA>
# 4 D <NA>
# 5 E val2
# 6 F <NA>
# 7 G <NA>
# 8 H <NA>
# 9 I val3
# 10 J <NA>
zoo::na.locf(data1$col2)
# [1] val1 val1 val1 val1 val2 val2 val2 val2 val3 val3