【问题标题】:Conditionally add values to a new column and replace values in the conditioning column in R有条件地将值添加到新列并替换 R 中条件列中的值
【发布时间】:2021-01-20 04:50:21
【问题描述】:

我正在做一个项目,我需要将文件读入我的环境,然后根据行的名称更改一个值并将新值添加到新列:即

     X1     Area   Mean   Min    Max              file_row_name
     55    0.165  31.384   4      82   ./Fluorescence Analysis/T0-12.5-150-10x-3-1.csv
     56    0.097  45.867   4      121  ./Fluorescence Analysis/T0-12.5-150-10x-3-1.csv
     168   0.042  28.252  20      49    ./Fluorescence Analysis/T0-25-50-10x-1-1.csv

所以在示例中,我想查看每一行的 file_row_name,如果这些行具有相同的名称,请创建两个变量:ConcRep 并替换 file_row_name 的值,使其看起来像这个:

     X1     Area   Mean   Min    Max              file_row_name        Conc     Rep
     55    0.165  31.384   4      82                     T0             12.5     3
     56    0.097  45.867   4      121                    T0             12.5     3
     168   0.042  28.252  20      49                     T0             25       1

到目前为止,我所做的是:

my_df$Conc[my_df$file_row_name  == "./Fluorescence Analysis/T0-12.5-150-10x-3-1.csv"]  <-  12.5
my_df$Rep[my_df$file_row_name  == "./Fluorescence Analysis/T0-12.5-150-10x-3-1.csv"]  <- 3
my_df$file_row_name[my_df$file_row_name  == "./Fluorescence Analysis/T0-12.5-150-10x-3-1.csv"]  <-  "T0"
my_df$Conc[my_df$file_row_name == "./Fluorescence Analysis/T0-12.5-150-10x-3.csv"] <- 12.5
my_df$Rep[my_df$file_row_name  == "./Fluorescence Analysis/T0-12.5-150-10x-3.csv"]  <- 3
my_df$file_row_name[my_df$file_row_name  == "./Fluorescence Analysis/T0-12.5-150-10x-3.csv"]  <-  "T0"

但这需要很长时间,当我尝试if 子句时:

if(my_df$file_row_name %in% c("./Fluorescence Analysis/T0-12.5-150-10x-3-1.csv",
                              "./Fluorescence Analysis/T0-12.5-150-10x-3.csv")){
  my_df$Conc = "12.5"
  my_df$Rep = 3
  my_df$file_row_name = "T0"
}

它告诉我:

Warning message:
In if (my_df$file_row_name %in% c("./Fluorescence Analysis/T0-12.5-150-10x-3-1.csv",  :
  the condition has longitud > 1 and only the first element will be used

如果我设法用另一个代码片段绕过该警告消息,基本上 file_row_name ConcRep 列将被替换为相同的值,并且不会根据条件进行任何更改。

【问题讨论】:

  • if没有向量化,可以使用ifelse
  • 但它不允许我添加我认为的列,或者我无法弄清楚如何做到这一点。
  • 你能检查下面发布的解决方案吗

标签: r dataframe replace


【解决方案1】:

代替if(未矢量化),我们创建逻辑行索引并用于分配

i1 <- my_df$file_row_name %in% c("./Fluorescence Analysis/T0-12.5-150-10x-3-1.csv",
                          "./Fluorescence Analysis/T0-12.5-150-10x-3.csv")

mydf[i1, c("Conc", "Rep", "file_row_name")] <- list("12.5", 3, "T0")

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2019-12-04
    • 2021-07-02
    • 2021-10-25
    • 1970-01-01
    • 2014-08-23
    相关资源
    最近更新 更多