根据R

时间:2017-12-16 14:14:12

标签: r loops

我有一个数据集“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 

但显然这很荒谬。我不能为我的生活写一个适当的循环,我已经尝试了几乎所有的版本,阅读所有的文档和示例,说实话,我不明白。有没有办法轻松自动地做到这一点?我试着搜索一些例子(我非常抱歉,之前可能已经提出了这个问题),但是我不知道我想要做什么的名字是什么,所以我不知道如何搜索它,而且我见过的所有例子都不符合我的要求。

非常感谢!

1 个答案:

答案 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