在不知道行号的情况下删除特定行

Mar*_*ler 3 r

我想从数据框中删除一行并对结果列求和.我根据其内容知道要删除的行,但不知道它的行号.下面我将介绍三个例子,其中两个有效.使用-删除行仅在第一行要被删除的作品.这是为什么?

我的问题与此类似:如何删除R中数据帧的第一行? 但是,根据行号删除行.

# This works.

state = 'OH'

my.data = read.table(text = "
      county  y1990 y2000
        cc       NA    2
        OH       NA   10
        bb       NA    1
", sep = "", header = TRUE, na.strings = "NA", stringsAsFactors = FALSE)

my.colsums2 <- colSums(my.data[!(my.data$county == state), 2:ncol(my.data)], na.rm=TRUE)
my.colsums2

# y1990 y2000 
#    0     3

# This works.

my.data = read.table(text = "
      county  y1990 y2000
        OH       NA   10
        cc       NA    2
        bb       NA    1
", sep = "", header = TRUE, na.strings = "NA", stringsAsFactors = FALSE)

my.colsums2 <- colSums(my.data[-(my.data$county == state), 2:ncol(my.data)], na.rm=TRUE)
my.colsums2

# y1990 y2000 
#    0     3

# This does not work.

my.data = read.table(text = "
      county  y1990 y2000
        cc       NA    2
        OH       NA   10
        bb       NA    1
", sep = "", header = TRUE, na.strings = "NA", stringsAsFactors = FALSE)

my.colsums2 <- colSums(my.data[-(my.data$county == state), 2:ncol(my.data)], na.rm=TRUE)
my.colsums2

# y1990 y2000 
#    0    11
Run Code Online (Sandbox Code Playgroud)

我猜我仍然困惑过之间的差异!-.谢谢你的任何建议.

Jos*_*ien 6

这应该清除-和之间的区别!,我怀疑你可以从那里拿走它;)

my.data$county == state
# [1]  TRUE FALSE FALSE

!(my.data$county == state)
# [1] FALSE  TRUE  TRUE

-(my.data$county == state)
# [1] -1  0  0
Run Code Online (Sandbox Code Playgroud)

!,否定布尔值,是你应该在这里使用的运算符.

  • 我在这里傻笑,因为我要说"不!".我认为否定" - "(否定)逻辑值是不好的做法.`-TRUE == -1`,而不是'FALSE`.`!LOGICAL = GOOD`,`-LOGICAL = BAD`,或者至少不直观.还有多少次我不能用! (2认同)