所以说我有这样的数据框:
data.frame(x = c(1,1,1,3,3,3),y = c(12,32,43,16,32,65))
我希望将其转换为如下数据框:
data.frame(x = c(1, 3), y_1 = c(12,16), y_2 =c(32, 32),y_3= c(43, 65))
基本上扩展每个唯一x值的y值。我试图用tidyr做到这一点,但不能完全看出它是如何工作的。有什么想法吗?
感谢。
答案 0 :(得分:3)
这是一个$('.col-sm-3').each(function (index, elem) {
if($(elem).text().length === 0) {
$(elem).html(' ');
}
});
解决方案:
data.table
即使所有library(data.table)
dat = as.data.table(df) # or setDT to convert in place
dat[, obs := paste0('y_', 1:.N), by=x]
dcast(dat, x ~ obs, value.var="y")
# x y_1 y_2 y_3
#1: 1 12 32 43
#2: 3 16 32 65
的行数不相同,这也会有效。
答案 1 :(得分:3)
我们可以使用body,html{
height:100%;
}
,然后使用aggregate
cSplit
来强制使用数据框,
splitstackshape
答案 2 :(得分:1)
Sotos使用aggregate
给出的答案特别优雅,但使用reshape
的以下方法也可能具有指导意义:
df <- data.frame(x = c(1,1,1,3,3,3),y = c(12,32,43,16,32,65))
df[,"time"] <- rep(1:3, 2)
wide_df <- reshape(df, direction="wide", timevar="time", idvar="x")
答案 3 :(得分:1)
dplyr/tidyr
library(dplyr)
library(tidyr)
df1 %>%
group_by(x) %>%
mutate(n = paste("y", row_number(), sep="_")) %>%
spread(n,y)
# x y_1 y_2 y_3
# (dbl) (dbl) (dbl) (dbl)
#1 1 12 32 43
#2 3 16 32 65