切片行并作为 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)
}
但这没有用,我猜是因为一些国家/地区的观察次数不同(在这种情况下是几年)。
任何帮助将不胜感激。
振硕
使用 dplyr
和 tidyr
的解决方案。关键是使用 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)
我想切几行并将数据作为另一个变量添加回数据集中。所以我的任务是这样的...转换
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)
}
但这没有用,我猜是因为一些国家/地区的观察次数不同(在这种情况下是几年)。
任何帮助将不胜感激。
振硕
使用 dplyr
和 tidyr
的解决方案。关键是使用 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)