【发布时间】:2016-10-22 20:22:19
【问题描述】:
有数以千计的答案描述了如何从宽到长重塑并按某些变量进行组织。我不知道我没有把头缠住。 我需要将最初以rater、obs、val1、val2 等开头的行组织到IRR 的rater 下的列中。
给定类似于我的数据的格式,可以使用以下方式创建:
r1 <- c('bob', 'sally', "george", "bob", "sally", "george")
r2 <- c(1,1,1,2,2,2)
r3 <- c("bad", "good", "good", "good", "good", "bad")
r4 <- c("bad", "bad", "good", "good", "good", "bad")
df=data.frame(r1,r2,r3,r4)
df = setNames(df, c('rater','obs', 'val1', 'val2'))
我需要根据“评估者”将数据组织成列。任何可行的东西都会很棒,尤其是如果可以保留“obs”(观察编号),例如 obs1_val1、obs1_val2 等。
对于类似的东西:
dcast(df, obs ~ rater)
创建:
obs bob george sally
1 1 bad good bad
2 2 good bad good
但是,这会聚合并删除 val2 的值。
相反,我需要一些类似的东西:
bob sally george
obs1_val1 bad good good
obs1_val2 bad bad good
obs2_val1 good good bad
obs2_val2 good good bad
查看类似的responses,我看到了对melt 的推荐,然后是dcast [我实际上并不想聚合-而是只是堆叠在列中]。
因为 val1 和 val2 的字符串应该被视为我尝试过的因素:
df$"val1" <- factor(df$val1, levels=c("bad","good"))
df$"val2" <- factor(df$val2, levels=c("bad","good"))
没有任何影响。获取:
Aggregation function missing: defaulting to length
obs bob george sally
1 1 2 2 2
2 2 2 2 2
这没有帮助。
?
【问题讨论】:
-
dcast(melt(df, 1:2), variable + obs ~ rater)或dcast(melt(df, 1:2), obs + variable ~ rater)如果您希望它按obs排序 -
查看输出我不确定 1:2 选择了什么。 ?
-
前两列
-
作为 id.vars。那是我的猜测。只是确保因为我在转换到实际数据时遇到了一些麻烦。即因子被显示为数字。