如何从R中的值创建列?

时间:2017-10-03 11:52:33

标签: r dataframe rows

我有一个这样的数据框:

             X1                   X2
1     Country                  Spain
2        Year                   2016
3       Value                  34.56
4     Country                  Italy
5        Year                   2016
6       Value                  48.21
7     Country                    USA
8        Year                   2016
9       Value                  84.37
10     Country                France
11       Year                   2016
12      Value                  18.94

等。

X1和X2是列。我从网站上删除了这些数据,但我希望这样:

Country    Year    Value
Spain      2016    34.56
Italy      2016    48.21
USA        2016    84.37
France     2016    18.94

我尝试使用gather()函数,但我失败了。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

尝试:

output <- data.frame(t(matrix(data$X2,3)))
colnames(output) <- c("Country", "Year", "Value")

如果您有可变长度,但“国家/地区”始终位于新“信息块”的第一行,请尝试:

library(data.table) # because i dont like data.frame
library(zoo) # for na.locf (last observation carried forward)
dt <- data.table(df)
dt[X1 == "Country", X3 := 1:length(X1 == "Country")]
dt[, X3 := na.locf(X3)]
dt
dcast(dt, X3 ~ X1)

本质上,这会创建一个ID列(X3),您可以使用该列将表格从长格式转换为宽格式。

答案 1 :(得分:0)

如果您当前的数据帧被调用df,那么这应该可以解决问题:

Country <- df$X2[df$X1 == "Country"]
Value <- df$X2[df$X1 == "Value"]
Year <- df$X2[df$X1 == "Year"]

df_new <- data.frame(Country, Year, Value)