【问题标题】:How to write a loop that select values containing a pattern and modifies them in r如何编写一个循环来选择包含模式的值并在 r 中修改它们
【发布时间】:2021-11-28 17:16:03
【问题描述】:

我正在尝试编写一个循环,给定包含特定模式的值的索引“list_idx”列表,例如“P”,执行以下操作:

1) 遍历数据集的一列 2) 对于列中的所有元素,如果它们的索引属于list_idx,则执行以下操作:

  • 它从值中删除模式“P”,
  • 它将值转换为整数,
  • 它乘以每 100 获得的数字。

我卡在第二部分的开头。有什么建议吗? 提前感谢您的帮助!

我试过了:

for (i in list_idx){
    Dataset$column[i] <- str_remove(Dataset$column, "K")
    Dataset$column[i] <- (as.integer(Dataset$column[i]))*100}

我得到错误:

"要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数要替换的项目数不是替换长度的倍数项目数..."

【问题讨论】:

  • 可以包含样本数据和预期输出吗?

标签: r dataframe loops indexing


【解决方案1】:

我们可能不需要在这里循环,即str_remove 是矢量化的,它不需要循环遍历“列”的每个元素。相反,我们可以根据 'list_idx' 中的索引对 'column' 进行子集化,删除“K”,转换为 integer,乘以 100 并更新回来

library(stringr)
Dataset$column[list_idx] <- as.integer(str_remove(Dataset$column[list_idx], "K")) * 100

【讨论】:

  • 谢谢!它确实解决了很大一部分问题!唯一的事情是,大多数索引属于列表的值现在已被 0 或 NA 替换。 [1] NA“0”NA​​ NA NA NA NA“0”NA​​ NA NA NA NA NA NA NA“0”NA​​ NA NA NA NA NA NA NA NA NA NA“0”“0”NA​​ NA [34]” 0" NA NA NA NA NA "0" "0" NA NA NA NA NA NA "0" NA "0" NA NA NA ...这可能与转换为整数有关吗?
  • 解决了!通过转换为数字,在乘以每 100 之前使用 as.numeric() ,然后我可以将结果转换为整数。非常感谢您的帮助!!!
猜你喜欢
  • 2012-07-25
  • 2016-06-03
  • 2021-06-20
  • 2019-05-15
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
相关资源
最近更新 更多