我有一个数据集“datP”,我试图添加一个名为“threshold”的新变量。我需要添加的值存储在一个看起来像这样的测试数据框中(国家代码为rownames,收入为唯一变量)。我在主数据集(“DatP”)中计算了每个国家的收入值,并将得到的矢量保存为“测试”数据帧,其中包含一个变量的32个观测值。
AT 42617.1
BE 43575.0
BG 35639.4
CH 63240.6
CY 28153.2
CZ 33948.6
我要添加新变量的原始数据集有一个名为PB020的国家/地区变量,其国家/地区代码与我的测试数据框中的rownames相同,
head(levels(datP$PB020))
[1] "AT" "BE" "BG" "CH" "CY" "CZ"
但是对每个国家的观察更多。现在,我可以将每个国家/地区代码的结果粘贴32次,如此
datP$threshold[datP$PB020=="AT"]<-test$AT
datP$threshold[datP$PB020=="BE"]<-test$BE
但显然这很荒谬。我不能为我的生活写一个适当的循环,我已经尝试了几乎所有的版本,阅读所有的文档和示例,说实话,我不明白。有没有办法轻松自动地做到这一点?我试着搜索一些例子(我非常抱歉,之前可能已经提出了这个问题),但是我不知道我想要做什么的名字是什么,所以我不知道如何搜索它,而且我见过的所有例子都不符合我的要求。
非常感谢!
答案 0 :(得分:2)
# country dataset (might have other columns as well)
df1 = data.frame(PB020 = c("AT", "BE", "BG", "CH", "BE", "BG", "CY", "CZ"))
df1
# PB020
# 1 AT
# 2 BE
# 3 BG
# 4 CH
# 5 BE
# 6 BG
# 7 CY
# 8 CZ
# threshold dataset
df2 = read.table(text = "
thr
42617.1
43575.0
35639.4
63240.6
28153.2
33948.6
", header=T)
row.names(df2) = c("AT", "BE", "BG", "CH", "CY", "CZ")
df2
# thr
# AT 42617.1
# BE 43575.0
# BG 35639.4
# CH 63240.6
# CY 28153.2
# CZ 33948.6
# add row names as a variable
df2$Country = row.names(df2)
# merge them
merge(df1, df2, by.x="PB020", by.y="Country", all.x = T)
# PB020 thr
# 1 AT 42617.1
# 2 BE 43575.0
# 3 BE 43575.0
# 4 BG 35639.4
# 5 BG 35639.4
# 6 CH 63240.6
# 7 CY 28153.2
# 8 CZ 33948.6