我遇到了一些我必须在数据框中更改的字符串问题。我的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
我想要做的是仅当“Name”值中包含“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”语句是如何工作的。有办法吗?
答案 0 :(得分:4)
我们根据“名称”列中“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]))