仅当满足另一列中的条件时,才将2值列中的值更改为其相反值

时间:2017-07-09 09:34:57

标签: r if-statement dataframe

我遇到了一些我必须在数据框中更改的字符串问题。我的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”语句是如何工作的。有办法吗?

1 个答案:

答案 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]))