【发布时间】:2014-09-22 16:50:50
【问题描述】:
这是我在这里的第一篇文章,我对编程和 R 非常陌生。所以请原谅任何愚蠢。
我有以下数据框:
a <- data.frame("sickness1" = c(1,1,2,3,3,5,6, 4, 4, 4),
"sickness2" = c(NA, NA, 3, 3, 4, 6, 1, 2, 5, 6),
"sickness3" = c(NA, NA, 3, 4, 4, 6, 1, 2, 5, 6),
"sickness4" = c(NA, NA, 6, 3, 4, 6, 1, 2, 5, 6))
每一行代表一个案例。每列都是一个有序的因子变量。我将变量转换为这样的因子(使用我在 stackoverflow 上找到的提示!):
a[] <- lapply(a, factor,
levels = c(1:6),
labels = c(3, 25, 50, 75, 97, 100))
我想得到以下输出:
percent sickness1 sickness2 sickness3 sickness4
1 3 1 1 1 2
2 25 1 1 1 1
3 50 2 1 1 2
4 75 1 2 1 3
5 97 1 1 1 1
6 100 2 2 3 1
我已经找到了一个非常冗长的解决方案:
# counting
ab <- ldply(lapply(a, count))
#getting it into the right format
ab2 <- dcast(
data = ab,
formula = x ~ .id,
value.var = "freq")
# changing the name of the first column
colnames(ab2)[1] <- "percent"
#deleting row 7 cause it contains the NAs which I dont want to have
ab2 <- ab2[-7,]
ab2
有没有更快更简单的方法来做到这一点?就像以某种方式使用 ddply 一样? summary(a) 给我的输出太乱了,我不知道如何操纵它以使其看起来像我想要的那样。此外,我正在处理的真实数据要大得多,我必须多次这样做......
【问题讨论】:
-
我想,一般来说,将此类数据放在 2 列“data.frame”(此处为 [疾病百分比])中会更有帮助;那么你可以打电话给
table(mydataframe)。例如。table(data.frame(pct = c(5,10,15,10,15,5,10,10,20,25), sickness = c(1,1,1,2,2,3,4,4,4,4))) -
您建议的信息丢失的形式。可能的是 3 列长的数据格式,因此值的另一列,然后它再次不适用于表(mydataframe)。为了更多地解释实际数据,每一行都是一个机构,例如一家医院,百分比是百分比范围,每个机构评估他们有多少患者患有疾病 1、疾病 2,依此类推
-
我明白了;然而(除非内存是一个问题)像
reshape(a, direction = "long", varying = list(1:4), sep = "", times = names(a))这样的“data.frame”可以存储必要的信息并且很容易操作。 (在这种情况下,您必须在对table的调用中明确声明两列。)希望我没有误解您的意思 -
你说的是对的,如果我为机构添加另一列,我可以执行以下操作:b2
-
刚刚发现我可以转置结果表以获得我想要的...唯一不是我想要的是它在顶部显示“变量”
标签: r