相关疑难解决方法(0)

R用tidyr传播多个列

拿这个样本变量

df <- data.frame(month=rep(1:3,2),
                 student=rep(c("Amy", "Bob"), each=3),
                 A=c(9, 7, 6, 8, 6, 9),
                 B=c(6, 7, 8, 5, 6, 7))
Run Code Online (Sandbox Code Playgroud)

我可以使用spreadtidyr将其更改为宽格式.

> df[, -4] %>% spread(student, A)
  month Amy Bob
1     1   9   8
2     2   7   6
3     3   6   9
Run Code Online (Sandbox Code Playgroud)

但我怎么能传播两个值,例如既AB,使得输出是一样的东西

  month Amy.A Bob.A Amy.B Bob.B
1     1     9     8     6     5
2     2     7     6     7     6
3     3     6     9     8     7
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr tidyr

90
推荐指数
1
解决办法
7万
查看次数

传播多个列[tidyr]

我想用数据在多个列上传播数据tidyr.

  dat <- data.frame(ID = rep(1,10), 
  col1 = LETTERS[seq(1,10)], 
  col2 = c(letters[seq(1,8)],NA,NA),
  col3 = c(rep(NA,8),"5",NA),
  col4 = c(rep(NA,8),NA,"value"))
Run Code Online (Sandbox Code Playgroud)

预期结果是:

Out <- data.frame(t(c(1,letters[seq(1,8)],"5","value")),row.names=NULL)
colnames(Out) <- c("ID",LETTERS[seq(1,10)])
Run Code Online (Sandbox Code Playgroud)

我提出了:

a <- dat %>% gather(variable, value, -(ID:col1)) %>% 
     unite(temp, col1, variable) %>% 
     spread(temp, value)
a[,-which(is.na(a))]
Run Code Online (Sandbox Code Playgroud)

这是笨拙的,也改变了列名.有更好的解决方案吗?

r dplyr tidyr

2
推荐指数
1
解决办法
3498
查看次数

标签 统计

dplyr ×2

r ×2

tidyr ×2

dataframe ×1