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