我的数据格式如下:
df.original <-data.frame(hhid = c(1001, 1001, 1001, 1002, 1002, 1003, 1004), item = c("candybar","toycar","chair","candybar", "chair", "candybar", "sled"), number= c(2, 1, 4, 3, 1, 3, 2))
我希望通过以下方式列出每个项目的数量:
df.desired <- data.frame(hhid = c(1001,1002,1003,1004), candybar=c(2,3,3,0), toycar=c(1,0,0,0), chair=c(4,1,0,0), sled=c(0,0,0,2))
我可以得到虚拟变量(基于我之前的一个类似但没有数量的问题)但是该方法中使用的表函数只计算两列重复。作为参考,我正在谈论的问题(并在不同的集合中使用)在这里:Function to make single hhid dummy vars from duplicated hhid list (with example data code)
我希望尽可能避免使用tidyverse并使用基本功能。我必须在一个异地Linux服务器上运行它,这使得由于防火墙安装管理员尚未安装的软件包很困难(如果它是唯一的方法,它是可能的) ,只是有点麻烦)。
答案 0 :(得分:2)
您要找的是将df
从长格式转换为宽格式。 R base有reshape
。但是,对于不存在该值的实例,这不会为您提供0
。它应该是NA
。您可以使用额外的代码行轻松替换NA
。
df.desired <- reshape(df.original, idvar = "hhid", timevar = "item", direction = "wide")
df.desired[is.na(df.desired)] <- 0
答案 1 :(得分:0)
您可以使用table
功能。
x = table(df.original)
x1 = (x[,,number=1])
x2 = (x[,,number=2])
x2[(x2 == 1)] = 2
x3 = (x[,,number=3])
x3[(x3 == 1)] = 3
x4 = (x[,,number=4])
x4[(x4 == 1)] = 4
x1+x2+x3+x4
不是最好的答案,但希望它可以帮到你!
最佳,