问题描述
name days N
A 1 80
A 2 90
B 1 70
B 3 85
B 5 100
C 2 80
C 5 95
我想获得以下输出:
days 1 2 3 4 5
A 80 90 NA NA NA
B 70 NA 85 NA 100
C NA 80 NA NA 95
reshape(data,idvar = data[,1],timevar = [,3],direction = "wide")
Error in `[.data.frame`(data,timevar) : undefined columns selected
`
解决方法
这是一个使用 reshape
reshape(
df,direction = "wide",idvar = "name",timevar = "days"
)
给出
name N.1 N.2 N.3 N.5
1 A 80 90 NA NA
3 B 70 NA 85 100
6 C NA 80 NA 95
,
library(tidyr)
df %>%
pivot_wider(id_cols = name,names_from = days,values_from = N)
要更改第一列的名称,您可以在运行上述代码后执行 names(df)[1] <- "days"
。
输出
name `1` `2` `3` `5`
<chr> <int> <int> <int> <int>
1 A 80 90 NA NA
2 B 70 NA 85 100
3 C NA 80 NA 95
注意:输出是一个 tibble
对象,它允许列名是数字,但在访问它们时,您需要使用反引号。通常,列名作为数字是不可取的,这就是为什么在基数 R
data.frame
中会修复以数字开头的列名。 @ThomasIsCoding 发布的解决方案输出一个 data.frame
对象,这就是列有一个“N”的原因。前缀。