我有一个这样的数据框:
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()
函数,但我失败了。非常感谢任何帮助。
答案 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)