切片行并作为 R 中的变量放回

slicing rows and put back in as variables in R

我想切几行并将数据作为另一个变量添加回数据集中。所以我的任务是这样的...转换

location   year   value
aus       1990    1
aus       1991    2
aus       1992    2
usa       1990    1
usa       1991    3
usa       1992    2
uk        1990    3
uk        1991    2
uk        1992    2   
...     

into something like this

year   value_aus   value_usa   value_uk
1990      1            1          3
1991      2            3          2
1992      2            2          2
.
.
.

我的数据有 36 个不同国家的 56 年。

我试过如下..

nations<-factor(data$LOCATION)
nationlist<-nations[!duplicated(nations)]


data_w<-data.frame(year=data$TIME[data$LOCATION==nationlist[1]])

for(loc in c(as.character(nationlist))){
  data_w<-data.frame(data_w[,], loc = data$Value[data$LOCATION==loc], check.rows=TRUE)
  }

但这没有用,我猜是因为一些国家/地区的观察次数不同(在这种情况下是几年)。

任何帮助将不胜感激。

振硕

使用 dplyrtidyr 的解决方案。关键是使用 spread 将数据帧从长格式转换为宽格式。 setNames(sub("location", "value", colnames(.))) 只是将列名更改为与所需输出相同。

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  spread(location, value, sep = "_") %>%
  setNames(sub("location", "value", colnames(.)))
dt2
#   year value_aus value_uk value_usa
# 1 1990         1        3         1
# 2 1991         2        2         3
# 3 1992         2        2         2

数据

dt <- read.table(text = "location   year   value
aus       1990    1
                 aus       1991    2
                 aus       1992    2
                 usa       1990    1
                 usa       1991    3
                 usa       1992    2
                 uk        1990    3
                 uk        1991    2
                 uk        1992    2   
                 ",
                 header = TRUE, stringsAsFactors = FALSE)