我想从数据帧的第二列中删除带有字符串(完全匹配)的行:
输入:
>data
habitat species
wet species1_ind1
wet species1_ind1
dry species2_ind1
dry species2_ind1
dry species3_ind1
dry species3_ind1
...
所需的输出(删除了包含物种2_ind1的行)
>new_data
habitat species
wet species1_ind1
wet species1_ind1
dry species3_ind1
dry species3_ind1
...
理想情况下,我想提供要从数据框中删除的字符串列表。
答案 0 :(得分:2)
您可以使用%in%
data[!(data$species %in% c("species2_ind1")), ]
habitat species
1 wet species1_ind1
2 wet species1_ind1
5 dry species3_ind1
6 dry species3_ind1
详细信息:
这是在选择species
不在列表中的行。数据既有行又有列。当您指定data[x,y]
时,x给出行,y给出列。 data[x, ]
表示您已使用x指定了行,但使用了所有列。上面的表达式接受所有列,但将行指定为!(data$species %in% c("species2_ind1"))
。
data$species %in% c("species2_ind1"))
给出了data $ species的值在列表中的那些行。但是这些都是我们要排除的,因此我们使用!
来否定逻辑表达式,并获得data$species
在列表中 not 的行。