我有一些数据如下:
library(tidyr)
library(data.table)
thisdata <- data.frame(numbers = c(1,3,4,5,6,1,2,4,5,6)
,letters = c('A','A','A','A','A','B','B','B','B','B'))
otherdata <- data.frame(numbers = c(1,2,3,4,5,6))
我希望通过字母列拆分'thisdata',将两个列表合并到数字列的'otherdata',然后用该列表中的相应字母填充字母NA . 所以:
out <- split(thisdata , f = thisdata$letters )
out2 <- lapply(out, function(x) merge(x,otherdata,by="numbers",all = TRUE))
但是,我无法让tidyr中的“填充”功能在lapply中工作
out3 <- lapply(out2,function(x) fill(x$channel))
Error in UseMethod("fill_") :
no applicable method for 'fill_' applied to an object of class "NULL"
这是我之后的输出,但宁愿在列表格式中执行计算:
out4 <- rbindlist(out2)
out5 <- out4 %>%
fill(letters) %>% #default direction down
fill(letters,.direction = "up")
numbers letters
1: 1 A
2: 2 A
3: 3 A
4: 4 A
5: 5 A
6: 6 A
7: 1 B
8: 2 B
9: 3 B
10: 4 B
11: 5 B
12: 6 B
1 回答
fill
期望数据框作为第一个参数,尝试fill(x, letters)
或x %>% fill(letters)
与magrittr
管道:一个更简单的方法是使用
tidyr::complete
: