我的数据按以下方式组织:
ID Year ID2012 var1 var2
1 2012 .
A 2014 1
A 2016 .
2 2012 .
B 2014 2
B 2016 .
2014年,我知道ID2012和ID2014之间的对应关系,我知道ID2016的编码方式与ID2014相同。现在我想让ID多年来一致得到一个小组:A被替换为1或者反过来。
ID Year ID2012 var1 var2
A 2012 .
A 2014 1
A 2016 .
B 2012 .
B 2014 2
B 2016 .
或
ID Year ID2012 var1 var2
1 2012 .
1 2014 1
1 2016 .
2 2012 .
2 2014 2
2 2016 .
ID2012和ID2014之间没有可以使用的算术规则。
答案 0 :(得分:3)
以下是一种方法:
# Read in the data
df <- read.table(text = "ID Year ID2012 var1
1 2012 . 9.1
A 2014 1 2.2
A 2016 . 1.0
2 2012 . 4.8
B 2014 2 4.7
B 2016 . 6.1",
header = T, stringsAsFactors = F)
# Find the positions where ID2012 tells us what ID to replace it with
ID.map <- match(df$ID, df$ID2012) # [1] 2 NA NA 5 NA NA
# Replace values in the ID column where they are defined in the map
df$ID[!is.na(ID.map)] <- df[ID.map[!is.na(ID.map)], 'ID']
# Result:
# ID Year ID2012 var1
# 1 A 2012 . 9.1
# 2 A 2014 1 2.2
# 3 A 2016 . 1.0
# 4 B 2012 . 4.8
# 5 B 2014 2 4.7
# 6 B 2016 . 6.1