Удалить строку разными значениями - PullRequest
0 голосов
/ 26 апреля 2018

Вот пример DF:

v1<-c(1,1,1,1,2,2,2,2,3,3,3,3)
v2<-c(234,457,234,675,235,205,347,578,695,783,200,697)
v3<-c(528,659,102,236,358,562,987,102,235,474,888,362)
df<- data.frame(v1,v2,v3)

В этом примере я намерен удалить строку с v1 = 1, v2 = 457 и v3 = 659.

Я пробую разными способами (подмножество или даже []), например:

subset(df,df$v1!=1 & df$v2!=457 & df$v3!=659)
df[df$v1!=1 & df$v2!=457 & df$v3!=659,]

Однако в обоих случаях все строки с v1 = 1 удаляются. Как мне написать это, чтобы удалить только строку с v1 = 1, v2 = 457 и v3 = 659?

Таким образом, окончательный DF должен быть таким:

v1<-c(1,1,1,2,2,2,2,3,3,3,3)
v2<-c(234,234,675,235,205,347,578,695,783,200,697)
v3<-c(528,102,236,358,562,987,102,235,474,888,362)
df<- data.frame(v1,v2,v3)

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Закрыть условия в скобках, перед которыми стоит восклицательный знак:

subset(df, !(df[,1] == 1 & df[,2] == 457 & df[,3] == 659))
0 голосов
/ 26 апреля 2018

Кажется, это правильная логика

df[!(df$v1 == 1 & df$v2 == 457 & df$v3 == 659),]

То, что вы делаете, удаляет все строки, где v1!= 1 и v2!=457 и v3!=659

> v1<-c(1,1,1,1,2,2,2,2,3,3,3,3)
> v2<-c(234,457,234,675,235,205,347,578,695,783,200,697)
> v3<-c(528,659,102,236,358,562,987,102,235,474,888,362)
> df<- data.frame(v1,v2,v3)

> df
   v1  v2  v3
1   1 234 528
2   1 457 659
3   1 234 102
4   1 675 236
5   2 235 358
6   2 205 562
7   2 347 987
8   2 578 102
9   3 695 235
10  3 783 474
11  3 200 888
12  3 697 362

> df[!(df$v1 == 1 & df$v2 == 457 & df$v3 == 659),]
   v1  v2  v3
1   1 234 528
3   1 234 102
4   1 675 236
5   2 235 358
6   2 205 562
7   2 347 987
8   2 578 102
9   3 695 235
10  3 783 474
11  3 200 888
12  3 697 362
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...