我在数据帧中必须更改某些字符串时遇到问题。我的df的结构如下:
df <- data.frame(Name = c("a2b", "a1a", "b2a", "a2b", "b1b", "b2a"),
Side = c("L", "R", "R", "L", "R", "L"))
Name Side
1 a2b L
2 a1a R
3 b2a R
4 a2b L
5 b1b R
6 b2a L
我想做的是仅在“名称”值中包含“ 2”的情况下,才将“ Side”列中的值替换为相反的值(保留值保持为“ 1”的行)。“侧面”(Side)列仅具有“ R”和“ L”作为可能的值。所以这是我想要得到的输出:
Name Side
1 a2b R
2 a1a R
3 b2a L
4 a2b R
5 b1b R
6 b2a R
我尝试了许多解决方案,但是我刚开始使用R,所以我还真的不知道“ if”语句如何工作。有办法吗?
我们基于“名称”列中“ 2”的出现创建一个索引(i1),使用该索引,对“侧面”进行子集设置,并使用 chartr
i1 <- grep("2", df$Name)
df$Side[i1] <- chartr("LR", "RL", df$Side[i1])
df
# Name Side
#1 a2b R
#2 a1a R
#3 b2a L
#4 a2b R
#5 b1b R
#6 b2a R
或另一种选择是使用分配,levels
因为“边”列为factor
levels(df$Side[i1]) <- rev(levels(df$Side[i1]))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句