【问题标题】:Conditional replace row values for multiple columns based on subset of values in another column基于另一列中的值子集有条件地替换多列的行值
【发布时间】:2015-02-01 08:22:44
【问题描述】:

好的,这应该很简单,我知道许多与此类似的问题已经得到解答,但没有一个答案适用于我的数据。

这里有一些简单的示例数据来说明我的观点:

Soil <- c("Organic - 10", "Organic - 12", "Sand - 6", "Silt - 6", "Silt - 6")
Value1 <- c(2, 5, 1, 4, 6)
Value2 <- c(45, 21, 776, 2, 6)
X03 <- c(4, 23, 45, 12, 23)
X04 <- c(56, 2, 7, 34, 65)

DF <- data.frame(Soil, Value1, Value2, X03, X04)

基本上我想要做的是将土壤为“有机”的行的 X02 和 X03 的值替换为 0。

我最初的想法是做以下事情:

# create index of the columns in whcih values are to be changed
index <- grep("^X0", colnames(DF))
# Use ifelse statement to change values conditionally
DF[,c(index)] <- ifelse(grepl("^Organic", DF$Soil), 0, DF[index])

然而,这会给出以下警告,并将 X03 和 X04 中的所有值替换为 0:

Warning message:
In `[<-.data.frame`(`*tmp*`, , c(index), value = list(0, 0, c(4,  :
  provided 5 variables to replace 2 variables

任何想法表示赞赏。

【问题讨论】:

    标签: r row conditional


    【解决方案1】:

    试试

    DF[grepl("^Organic", DF$Soil),index]<-0
    

    【讨论】:

    • 简单、优雅、效果最佳!总有一天,我将能够自己第一次弄清楚这些事情!谢谢。
    猜你喜欢
    • 2016-11-29
    • 2012-11-06
    • 2021-07-02
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2020-05-20
    • 2021-07-17
    • 2016-01-21
    相关资源
    最近更新 更多