我想根据一列中的值从数据中删除某些行。我尝试过几种方法:
#reads in data
sbc016formants.df <- read.table("file path", sep="\t", header = F, strip.white = T)
# names columns
names(sbc016formants.df) <- c("fileName", "start", "end", "vowelLabel")
# list of values I want to remove
list16 <- c(615.162, 775.885)
# produces a subset of data - removes rows with values from list 16 in the start column
sbc016formants.df <- subset(sbc016formants.df, !start %in% list16)
为某些但不是所有数据文件生成此错误消息:
Error in match(x, table, nomatch = 0L) :
'match' requires vector arguments
我也根据this主题
中的第二个答案尝试了这一点sbc002formants.df <- sbc002formants.df[ apply(sbc002formants.df, 1 , function(x) any(unlist(x) %in% list2) ) , ]
这消除了列表中的一些项目(list16
),但不是全部。我想使用第一个答案,但我不理解代码(我不确定bl
是什么,在示例中)。
以下是制作可重现示例的代码:
# creates dataframe
fileName <- c("sbc016", "sbc016", "sbc016", "sbc016")
start <- c(1.345, 2.345, 615.162, 775.885)
end <- c(100.345, 200.345, 715.162, 875.885)
sbc016formants.df <- data.frame(fileName, start, end)
# list of what I want to get rid of
list16 <- c(615.162, 775.885)
答案 0 :(得分:1)
假设我正确理解了这个问题,dplyr
应该能够轻松有效地完成这项工作。
fileName <- c("sbc016", "sbc016", "sbc016", "sbc016")
start <- c(1.345, 2.345, 615.162, 775.885)
end <- c(100.345, 200.345, 715.162, 875.885)
sbc016formants.df <- data.frame(fileName, start, end)
# list of what I want to get rid of
list16 <- c(615.162, 775.885)
install.packages("dplyr", dependencies = TRUE)
library(dplyr)
sbc016formants.df %>% filter(!start %in% list16)
或
sbc016formants.df %>% filter(start != list16)