[英]Match/subset one dataframe based on conditional values in another dataframe in R
[英]Conditional if on a dataframe based on another one
我有一個這樣的數據框
ID VAR
a 3
b 2
c 6
b 8
z 1
c 5
b 7
另一個計算一個ID出現的次數
numb nrec
a 1
b 3
c 2
z 1
我想做的就是更改只有一條記錄的所有ID的ID名稱,例如
ID VAR
-1 3
b 2
c 6
b 8
-1 1
c 5
b 7
這是一個丑陋的解決方案
> ind <- as.character(df2$numb[df2$nrec==1])
> df1$ID <- as.character(df1$ID)
> df1$ID[as.character(df1$ID) %in% ind] <- "-1"
> df1
ID VAR
1 -1 3
2 b 2
3 c 6
4 b 8
5 -1 1
6 c 5
7 b 7
如果您希望ID
再次成為因數,則df1$ID <- as.factor(df1$ID)
更好的方法是使用plyr包中的重revalue
:
library(plyr)
df1$ID <- with(df1, revalue(ID, c("a"="-1", "z"=-1)))
編輯:使用基本函數的更簡潔方法
ind <- as.character(df2$numb[df2$nrec==1])
levels(df1$ID)[levels(df1$ID)==ind] <- "-1"
您甚至可以僅使用df1
直接進行操作,而無需使用df2
。 使用table
和一些索引...
levels(df1$ID)[levels(df1$ID)==with(df1, levels(ID)[table(ID)==1])] <- "-1"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.