子集值在R中不相加
我在R中有一个数据帧df。所有列都是字符类子集值在R中不相加,r,R,我在R中有一个数据帧df。所有列都是字符类 > dim(df) [1] 1000 6 我试图删除df$entry==c7795的行 正如您在上面看到的,我有35个条目要从数据框中删除。但是,当我使用子集删除这些时,它不会删除正确的数量: entries_to_remove <- subset(df, entry != c("7795")) > dim(entries_to_remove) [1] 648 6 上面的命令本应删除35个条目,但却删除了352个条目。
> dim(df)
[1] 1000 6
我试图删除df$entry==c7795的行
正如您在上面看到的,我有35个条目要从数据框中删除。但是,当我使用子集删除这些时,它不会删除正确的数量:
entries_to_remove <- subset(df, entry != c("7795"))
> dim(entries_to_remove)
[1] 648 6
上面的命令本应删除35个条目,但却删除了352个条目。有人知道为什么会发生这种情况吗?上述解决方案不起作用,我认为问题不在于NA。然而,我自己解决了这个问题。这是一个解决办法,但它奏效了:
# list the row numbers for the entries to remove
row_remove <- rownames(entries_to_remove )
# make a list of all the row numbers
all_rows <- 1:dim(df)[1]
# create a vector with only the rows to keep
subset_row <- all_rows[!(all_rows%in%row_remove)]
# subset the dataframe with these rows
df<- df[subset_row,]
下面是另一个解决方案,它只占用一行:
df[-which(grepl("7995", apply(df, 1, paste0, collapse = " "))),]
结果:
v1 entry1 entry2 entry3
2 2 5 5 2
3 3 2 4 2
4 4 2 3 1
6 6 1 2 1
7 7 2 4 4
8 8 4 5 5
9 9 5 1 5
数据:
这个问题与NAs有关,其他一些解决方案也可以使用,但最简单也是最实用的方法是在%中使用%,而不是在%中使用==
entries_to_remove <- subset(df, !(entry %in% c("7795")))
entries_to_remove <- subset(df, entry %in% c("7795"))
您不能使用NA检查subsetdf,is.naentry进行子集。df$条目中是否有NAs?
set.seed(121)
df <- data.frame(
v1 = 1:10,
entry1 = c(sample(1:5, 9, replace = T), 7995),
entry2 = c(sample(1:5, 4), 7995, sample(1:5, 5)),
entry3 = c(7995, sample(1:5, 9, replace = T))
)
df[2:4] <- lapply(df[2:4], as.character) # convert to character, as in your data
df
v1 entry1 entry2 entry3
1 1 1 2 7995
2 2 5 5 2
3 3 2 4 2
4 4 2 3 1
5 5 3 7995 2
6 6 1 2 1
7 7 2 4 4
8 8 4 5 5
9 9 5 1 5
10 10 7995 3 5
entries_to_remove <- subset(df, !(entry %in% c("7795")))
entries_to_remove <- subset(df, entry %in% c("7795"))
> c( 5, 6, 7) == 5
[1] TRUE FALSE FALSE
> c( 5, 6, 7 , NA) == 5
[1] TRUE FALSE FALSE NA
> c( 5, 6, 7 , NA) %in% 5
[1] TRUE FALSE FALSE FALSE