我有两个数据框:
df1(空,但具有特定的名称)
apple orange banana pear grape
0 0 0 0 0
df2
fruit1 count1 fruit2 count2
apple 2 pear 1
grape 4 orange 2
banana 1 NA NA
这是我想要的输出:
apples oranges bananas pears grapes
2 0 0 1 0
0 2 0 0 4
0 0 1 0 0
我考虑过做一些类似的事情:
for f (in range(nrow(df2))){
for (i in range(ncol(df1))){
if(fruit1==columnName[i]){
df1[f,i]<-count1
ect...
然而,我正在处理一个相当大的数据集,这似乎不是正确的方法。
data.table 选项:
library(data.table)
setDT(df2)
# add row number
df2[, r := .I]
# "melt" common columns together
cols = c("fruit", "count")
m2 = melt(df2, measure=patterns(cols), value.name=cols)
# add unobserved fruits, if any
m2[, fruit := factor(fruit, levels = names(df1))]
# "cast" each fruit to its own column, ignoring NA rows
dcast(m2[!is.na(fruit)], r ~ fruit, fill = 0L, drop = FALSE)
r apple orange banana pear grape
1: 1 2 0 0 1 0
2: 2 0 2 0 0 4
3: 3 0 0 1 0 0
The factor
以防万一你有一些额外的关卡df1
没有出现在df2
。如果你有一行,两者都fruit1
and fruit2
是空白的,您必须弄清楚要如何扩展此方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)