我想使用tiyverse separate_rows
函数来分隔同一行中大于1个数值的行。我可以在数据框上执行此操作,但不能在数据框列表上进行操作,我也不知道为什么。列表中的所有数据框都具有相同的列名,只是行数不同。
a<-c("a","b","c")
b<-c(1,"1,2",3)
df1<-data.frame(a,b)
df2<-df1
df2[2,2]="1"
我可以在df1上使用separate_rows
separate_rows(df1,b)
> separate_rows(df1,b)
a b
1 a 1
2 b 1
3 b 2
4 c 3
但不在列表中:
mylist<-list(df1,df2)
lapply(mylist, function(x) separate_rows(b))
因为出现错误
> lapply(mylist, function(x) separate_rows(b))
Error in UseMethod("separate_rows_") :
no applicable method for 'separate_rows_' applied to an object of class "character"
Called from: separate_rows_(data, cols = cols, sep = sep)
我在做什么错了?
编辑: 我知道我做错了(没有传递所有参数)
答案 0 :(得分:1)
您还需要通过df
lapply(mylist, function(x) separate_rows(x,b))
这是一个简单的非优雅解决方案,但它可以正常工作
lapply(mylist, function(x) {y <- separate_rows(x,b)
y['b'] <- as.numeric(y[['b']])
y}) %>% str()