R循环通过数据表与dcast的组合求和
我有一个类似的表,有更多的列。我试图做的是创建一个新表,显示每个ID、每种类型的计数数和每种类型的值 df 我可以使用R循环通过数据表与dcast的组合求和,r,R,我有一个类似的表,有更多的列。我试图做的是创建一个新表,显示每个ID、每种类型的计数数和每种类型的值 df 我可以使用 dcast(df[,j=list(sum(Counts,na.rm = TRUE)),by = c("ID","Type")],ID ~ paste(Type,"Counts",sep="_")) 但是,我希望使用循环遍历数据表中的每一列。但是没有成功,它总是把所有的行加起来。我试着用 sum(df[[i]],na.rm = TRUE) sum(names(df)[[i]]
dcast(df[,j=list(sum(Counts,na.rm = TRUE)),by = c("ID","Type")],ID ~ paste(Type,"Counts",sep="_"))
但是,我希望使用循环遍历数据表中的每一列。但是没有成功,它总是把所有的行加起来。我试着用
sum(df[[i]],na.rm = TRUE)
sum(names(df)[[i]] == "",na.rm = TRUE)
sum(df[[names(df)[i]]],na.rm = TRUE)
j = list(apply(df[,c(3:4),with=FALSE],2,function(x) sum(x,na.rm = TRUE)
我想要一张像这样的新桌子
ID A_Counts B_Counts A_Value B_Value
1 1 2 5 4
2 5 3 5 6
我自己的表有更多的列,但想法是一样的。我是不是把它复杂化了,还是有一个我不知道的简单把戏?请帮帮我。谢谢大家! 您必须先
融化
您的数据,然后dcast
它:
library(reshape2)
df2 <- melt(df,id.vars = c("ID","Type"))
# ID Type variable value
# 1 1 A Counts 1
# 2 1 B Counts 2
# 3 2 A Counts 2
# 4 2 A Counts 3
# 5 2 B Counts 1
# 6 2 B Counts 2
# 7 1 A Value 5
# 8 1 B Value 4
# 9 2 A Value 1
# 10 2 A Value 4
# 11 2 B Value 3
# 12 2 B Value 3
dcast(df2,ID ~ Type + variable,fun.aggregate=sum)
# ID A_Counts A_Value B_Counts B_Value
# 1 1 1 5 2 4
# 2 2 5 5 3 6
library(重塑2)
df2您必须先融化
您的数据,然后dcast
它:
library(reshape2)
df2 <- melt(df,id.vars = c("ID","Type"))
# ID Type variable value
# 1 1 A Counts 1
# 2 1 B Counts 2
# 3 2 A Counts 2
# 4 2 A Counts 3
# 5 2 B Counts 1
# 6 2 B Counts 2
# 7 1 A Value 5
# 8 1 B Value 4
# 9 2 A Value 1
# 10 2 A Value 4
# 11 2 B Value 3
# 12 2 B Value 3
dcast(df2,ID ~ Type + variable,fun.aggregate=sum)
# ID A_Counts A_Value B_Counts B_Value
# 1 1 1 5 2 4
# 2 2 5 5 3 6
library(重塑2)
df2示例数据集的输出是什么?请更新我想要的输出。谢谢你的链接你好,谢谢你的链接。我没有在网上做足够的研究来找到这个链接。没关系,很高兴它能帮上忙。你对样本数据集的输出是什么?请更新我想要的输出。谢谢你的链接你好,谢谢你的链接。我没有在网上做足够的研究来找到这个链接。没关系,很高兴它对我有帮助。非常感谢你!它简单有效。我有太多的需要学习了。非常感谢你!它简单有效。我还有很多东西要学
df3 <- aggregate(cbind(Counts,Value) ~ ID + Type,df,sum)
# ID Type Counts Value
# 1 1 A 1 5
# 2 2 A 5 5
# 3 1 B 2 4
# 4 2 B 3 6
reshape(df3, idvar='ID', timevar='Type',direction="wide")
# ID Counts.A Value.A Counts.B Value.B
# 1 1 1 5 2 4
# 2 2 5 5 3 6
df <- read.table(text ="ID Type Counts Value
1 A 1 5
1 B 2 4
2 A 2 1
2 A 3 4
2 B 1 3
2 B 2 3",stringsAsFactors=FALSE,header=TRUE)