如何使用dplyr在数据帧中交换TRUE和FALSE

如何使用dplyr在数据帧中交换TRUE和FALSE,r,dplyr,R,Dplyr,我希望将datatable 我知道x%slice(c(1,4,5))%>%突变(?) 这里有一种方法- mtcars %>% select(selected) %>% slice(c(1,4,5)) %>% mutate( selected = !selected # or as.logical(1 - selected) ) 这里有一条路- mtcars %>% select(selected) %>% slice(c(

我希望将
datatable

我知道
x%slice(c(1,4,5))%>%突变(?)
这里有一种方法-

mtcars %>% 
  select(selected) %>% 
  slice(c(1,4,5)) %>% 
  mutate(
    selected = !selected # or as.logical(1 - selected)
  )
这里有一条路-

mtcars %>% 
  select(selected) %>% 
  slice(c(1,4,5)) %>% 
  mutate(
    selected = !selected # or as.logical(1 - selected)
  )
如果您只想对这些行进行子集划分,那么@Shree的答案可能是正确的。如果要仅反转这些行,但保留所有行,请执行以下操作:

dplyr
中:

库(dplyr)
mtcars%>%
变异(所选=真)%>%
#答案的核心
变异(选定=如果其他(行号()%c(1,4,5),!选定,选定))
#mpg cyl disp hp drat wt qsec vs am齿轮carb已选择
#121.06160.01103.902.62016.46014假
#2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4正确
#3 22.8 4 108.0 93 3.85 2.320 18.61 1 4 1正确
#4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1错误
#5 18.7 8 360.0 175 3.15 3.440 17.02 0 3 2错误
#6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1正确
#7 14.3 8 360.0 245 3.21 3.570 15.84 0 3 4正确
#824.4146.762 3.693.19020.00 1 0 4 2正确
# ...

你说的是数据表,我想你指的是数据表,在这种情况下

库(data.table)
DT%
[,已选定:=ifelse(.I%in%c(1,3,4),!已选定,已选定)]
水头(DT,n=8)
#mpg cyl disp hp drat wt qsec vs am齿轮carb已选择
#1:21.06160.01103.902.62016.4601144假
#2:21.06160.01103.902.87517.02014正确
#3:22.84108.0933.852.32018.61141false
#4:21.46258.01103.083.21519.441031假
#5:18.7 8 360.0 175 3.15 3.440 17.02 0 3 2正确
#6:18.1 6225.0 105 2.76 3.460 20.22 1 0 3 1正确
#7:14.38360.02453.213.57015.84034正确
#8:24.4 146.7 62 3.69 3.190 20.00 1 0 4 2正确

Base R中,您可以这样做:

mtcars$selected如果您只想对这些行进行子集划分,那么@Shree的答案可能是正确的。如果要仅反转这些行,但保留所有行,请执行以下操作:

dplyr
中:

库(dplyr)
mtcars%>%
变异(所选=真)%>%
#答案的核心
变异(选定=如果其他(行号()%c(1,4,5),!选定,选定))
#mpg cyl disp hp drat wt qsec vs am齿轮carb已选择
#121.06160.01103.902.62016.46014假
#2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4正确
#3 22.8 4 108.0 93 3.85 2.320 18.61 1 4 1正确
#4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1错误
#5 18.7 8 360.0 175 3.15 3.440 17.02 0 3 2错误
#6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1正确
#7 14.3 8 360.0 245 3.21 3.570 15.84 0 3 4正确
#824.4146.762 3.693.19020.00 1 0 4 2正确
# ...

你说的是数据表,我想你指的是数据表,在这种情况下

库(data.table)
DT%
[,已选定:=ifelse(.I%in%c(1,3,4),!已选定,已选定)]
水头(DT,n=8)
#mpg cyl disp hp drat wt qsec vs am齿轮carb已选择
#1:21.06160.01103.902.62016.4601144假
#2:21.06160.01103.902.87517.02014正确
#3:22.84108.0933.852.32018.61141false
#4:21.46258.01103.083.21519.441031假
#5:18.7 8 360.0 175 3.15 3.440 17.02 0 3 2正确
#6:18.1 6225.0 105 2.76 3.460 20.22 1 0 3 1正确
#7:14.38360.02453.213.57015.84034正确
#8:24.4 146.7 62 3.69 3.190 20.00 1 0 4 2正确

Base R中,您可以这样做:


mtcars$选择了非常好的答案。我不打算这样做。答案一就是我要找的。顺便说一句,不需要第一次选择mutate(selected=TRUE),因为我还希望代码以相反的方向交换第一次
mutate(selected=TRUE)
只是设置代码,以模拟您在代码中启动的代码。我假设在您的生产代码中会有更多的内容,因此(正如您推断的那样)感兴趣的是使用
if\u else
进行变异。很高兴它(他们)成功了。对于这个选择代码来说并不是那么多,但对于我正在添加到我的R Shining应用程序中的一个新功能来说,这是一个很小的部分,到目前为止,它已经有数千行代码了。由于我喜欢dplyr方法的可读性,所以我尝试更频繁地使用dplyr方法。我不打算这样做。答案一就是我要找的。顺便说一句,不需要第一次选择mutate(selected=TRUE),因为我还希望代码以相反的方向交换第一次
mutate(selected=TRUE)
只是设置代码,以模拟您在代码中启动的代码。我假设在您的生产代码中会有更多的内容,因此(正如您推断的那样)感兴趣的是使用
if\u else
进行变异。很高兴它(他们)成功了。对于这个选择代码来说并不是那么多,但对于我正在添加到我的R Shining应用程序中的一个新功能来说,这是一个很小的部分,到目前为止,它已经有数千行代码了。由于我喜欢dplyr方法的可读性,所以我尝试更频繁地使用它