简体   繁体   English

使用 R 中的条件更改列中的特定值

[英]Change specific value in column with conditions in R

I have a daframe such as:我有一个 daframe,例如:

COL1       COL2 
C.lupus    10
C.lupus    20
C.famil    90
O.cuniculus 30
O.cuniculus 70 
O.cuniculus 10 

and I would like tu replace each COL1 == to O.cuniculus and where COL2 < 50 by O.spatacus我想你将每个COL1 ==替换为O.cuniculus并且COL2 < 50O.spatacus

Here I should then get:在这里我应该得到:

  COL1       COL2 
    C.lupus    10
    C.lupus    20
    C.famil    90
    O.spatacus 30
    O.cuniculus 70 
    O.spatacus 10 

Thanks a lot for your help非常感谢你的帮助

You could subset your data.frame and then assign the new values with <- .您可以对 data.frame 进行子集化,然后使用<-分配新值。

If your data frame were called data :如果您的数据框被称为data

data
#         COL1 COL2
#1     C.lupus   10
#2     C.lupus   20
#3     C.famil   90
#4 O.cuniculus   30
#5 O.cuniculus   70
#6 O.cuniculus   10

You could subset to only those rows that fulfill the conditions:您可以仅对那些满足条件的行进行子集化:

data[data$COL2 < 50 & data$COL1 == "O.cuniculus",]
#         COL1 COL2
#4 O.cuniculus   30
#6 O.cuniculus   10

Then subset also only COL1 :然后子集也只有COL1

data[data$COL2 < 50 & data$COL1 == "O.cuniculus","COL1"]
#[1] "O.cuniculus" "O.cuniculus"

And then assign the new value:然后分配新值:

data[data$COL2 < 50 & data$COL1 == "O.cuniculus","COL1"] <- "O.spatacus"
data
#         COL1 COL2
#1     C.lupus   10
#2     C.lupus   20
#3     C.famil   90
#4  O.spatacus   30
#5 O.cuniculus   70
#6  O.spatacus   10
data <- structure(list(COL1 = c("C.lupus", "C.lupus", "C.famil", "O.cuniculus", 
"O.cuniculus", "O.cuniculus"), COL2 = c(10L, 20L, 90L, 30L, 70L, 
10L)), class = "data.frame", row.names = c(NA, -6L))

A base R option using replace使用replace的基本 R 选项

transform(
  df,
  COL1 = replace(COL1, COL1 == "O.cuniculus" & COL2 < 50, "O.spatacus")
)

gives

         COL1 COL2
1     C.lupus   10
2     C.lupus   20
3     C.famil   90
4  O.spatacus   30
5 O.cuniculus   70
6  O.spatacus   10

A data.table option works in a similar manner data.table选项以类似的方式工作

setDT(df)[COL1 == "O.cuniculus" & COL2 < 50, COL1 := "O.spatacus"]

such that这样

          COL1 COL2
1:     C.lupus   10
2:     C.lupus   20
3:     C.famil   90
4:  O.spatacus   30
5: O.cuniculus   70
6:  O.spatacus   10

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM