如何根据同一列中前一个单元格中的单词填充R中数据框中的单元格?

时间:2017-07-13 21:48:23

标签: r

我在R中有一个数据框,我编辑的内容如下所示:

enter image description here

我想用'x'更改第2列中的单元格,以匹配x列表顶部的单词。例如,我希望第2行第8-20行列出单词“farm_working_expenses”,第2列第22-27行列出单词“feed_expenses”等。

有没有办法编辑数据框中的'x'单元格以匹配同一列中前一个单元格的内容?

1 个答案:

答案 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