我有一个这种格式的数据框:
df
name,status,text
stock1,open,text1
stock1,closed,text something here
我希望将其转换为:
name,status1,status2,text1,text2
stock1,open,closed,text1,text something here
如何在不知道确切列数的情况下将其列转换为行?
答案 0 :(得分:1)
我们可以使用dcast
中的library(data.table)
,value.var
可以使用多个setDT(df1)
列。
我们将'data.frame'转换为'data.table'(dcast
),按'name'分组,我们创建一个序列列('N'),然后使用value.var
和指定library(data.table)
setDT(df1)[, N:= 1:.N, name]
dcast(df1, name~N, value.var=c("status", "text"))
# name status_1 status_2 text_1 text_2
#1: stock1 open closed text1 text something here
列。
base R
按“名称”创建序列列后,reshape
选项为df2 <- transform(df1, N= ave(seq_along(name), name, FUN=seq_along))
reshape(df2, idvar="name", timevar="N",direction="wide")
# name status.1 text.1 status.2 text.2
#1 stock1 open text1 closed text something here
。
df1 <- structure(list(name = c("stock1", "stock1"),
status = c("open",
"closed"), text = c("text1 ", "text something here")),
.Names = c("name",
"status", "text"), class = "data.frame",
row.names = c(NA, -2L))
sudo CHMOD -R -N MYFOLDER