簡體   English   中英

如果在基於另一幀的數據幀上則為條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM