【发布时间】:2019-12-04 07:44:25
【问题描述】:
我在这个线程中有一个与原始海报非常相似的任务: Create new column in dataframe based on partial string matching other column
但是在 TEST 下有 10 种不同的条件。原始线程中有一个建议如何为> 3个条件编码,但是我无法理解如何将其应用于我的数据。
我想创建一个名为 DISTANCE 的列,用于从测试中提取距离。因此,对于名称中包含“0.10m”的任何测试,我希望能够在距离列中包含“0-10m”。如果名称中为“0.20m”,我希望它在 DISTANCE 列中为“0-20m”,依此类推。
PLAYER SEX TEST VALUE
Player 1 Female ICE_0.10m 2.100000
Player 1 Female ICE_0.20m 3.475000
Player 1 Female ICE_10.20m 1.375000
Player 1 Female ICE_20.30m 1.246000
Player 1 Female ICE_0.30m 4.721000
Player 1 Female ICE_Vel_0.10m 4.761905
Player 1 Female ICE_Vel_0.20m 5.755396
Player 1 Female ICE_Vel_10.20m 7.272727
Player 1 Female ICE_Vel_20.30m 8.025682
Player 1 Female ICE_Vel_0.30m 6.354586
Player 1 Female OFF_0.10m 1.983000
Player 1 Female OFF_0.20m 3.380000
Player 1 Female OFF_10.20m 1.397000
Player 1 Female OFF_20.30m 1.380000
Player 1 Female OFF_0.30m 4.760000
Player 1 Female OFF_Vel_0.10m 5.042864
Player 1 Female OFF_Vel_0.20m 5.917160
Player 1 Female OFF_Vel_10.20m 7.158196
Player 1 Female OFF_Vel_20.30m 7.246377
Player 1 Female OFF_Vel_0.30m 6.302521
我试过了,但没用:
SpeedLong$Distance <- ifelse(grepl("0.10m", SpeedLong$Tag, ignore.case = T), "0-10m",
ifelse(grepl("0.20m", SpeedLong$Tag, ignore.case = T), "0-20m",
ifelse(grepl("0.30m", SpeedLong$Tag, ignore.case = T), "0-30m",
ifelse(grepl("0.10m", SpeedLong$Tag, ignore.case = T), "0-10m", "20-30m"))
使用该代码我没有收到错误消息,但它显示控制台中的代码以 + 符号结尾我猜这意味着代码不完整?我不知道 else 和 grepl 是否是解决此问题的最佳方法,因此欢迎提供其他建议!
【问题讨论】:
-
控制台
+是因为括号嵌套不正确或没有正确闭合。我认为您的示例应以 4 结尾:))))。考虑将dplyr::case_when()作为多个ifelse的替代方案。 -
这也可以添加四个 ))))。谢谢!我也会尝试用 case_when() 找到一种方法。下面的解决方案有效,但有其他方法来做某事总是好的。
标签: r subset multiple-columns multiple-conditions