【发布时间】:2018-05-14 13:17:54
【问题描述】:
我有一个这样的调查数据集:
df <- data.frame(
employment = 0.45,
income = 0.3,
incomeFU1 = 0.4,
married = 0.1,
employmentFU1 = 0.7,
employmentFU2 = 0.8,
incomeFU2 = 0.8,
smokingFU1 = 0.6,
smokingFU3 = 0.1,
ageFU3 = 0.9,
marriedFU2 = 0.3
)
在这个数据集中,人们被问及他们的就业状况、收入等。 数据是一个汇总级别的数据,可以将其视为所有就业人口的比例、平均收入等。因此数据集只有一条线。
在基线和 3 次随访中询问了本调查中的个人。 基线变量没有结尾字符串,后续答案有一个结尾,如后续 1 的“FU1”等等。
我现在有了这些变量的第二个列表:
l <- list()
l[[1]] <- c("employment", "income", "married")
l[[2]] <- c("employmentFU1", "incomeFU1", "smokingFU1")
l[[3]] <- c("employmentFU2", "incomeFU2", "marriedFU2")
l[[4]] <- c("smokingFU3", "ageFU3")
第一个列表项有基线变量,第二个列表项有后续 1 个变量,第三个有后续 2 个等等。
请注意,有些变量在 2 或 3 次(有时甚至是全部)后续行动中可用,有些只出现一次。
我现在想根据列表变量将这个数据框重塑为矩阵或数据框,如下所示:
employment income married NA NA
employmentFU1 incomeFU1 NA smokingFU1 NA
employmentFU2 incomeFU2 marriedFU2 NA NA
NA NA NA smokingFU3 ageFU3
此矩阵中的行数是列表元素的数量,在本例中为 4。
我尝试了类似的方法,但没有走多远:
m <- matrix()
m[1,1] <- df[, l[[1]][1]]
m[1,2] <- l[[2]][str_detect(l[[1]][1], l[[2]])]
【问题讨论】:
-
应该
smokingFU3位于第四行(而不是示例中的第三行)? -
@storaged 你是对的,对不起,我更正了
-
我只是好奇,下面的解决方案对你有用吗?