从R中的数据帧中删除0列
我知道以前有人问过这个问题,但他们提供的解决方案在我的案例中给出了一些奇怪的结果 我的数据帧从R中的数据帧中删除0列,r,dataframe,R,Dataframe,我知道以前有人问过这个问题,但他们提供的解决方案在我的案例中给出了一些奇怪的结果 我的数据帧(df)是这样的吗 Department1 Department2 Department3 Cafeteria Lobby(TT) Lobby(Music Band) James 0 1 0 0 0 0 Flynn 0 1
(df)
是这样的吗
Department1 Department2 Department3 Cafeteria Lobby(TT) Lobby(Music Band)
James 0 1 0 0 0 0
Flynn 0 1 0 0 0 0
Liam 0 1 0 0 0 0
我期望的结果是
Department2
James 1
Flynn 1
Liam 1
我用来删除零列的代码是
df <- df[, colSums(df != 0) > 0]
当有多个列包含除零以外的不同值时,上述代码可以工作。在这种情况下如何获得所需的结果?解决问题的直接方法是在对数据帧进行子集设置时使用
drop=FALSE
:
df <- df[, colSums(df != 0) > 0, drop=FALSE]
df 0,drop=FALSE]
这将告诉R不要将数据帧强制降到最低维度,在本例中,这是一个数值向量。正如您似乎已经注意到的,如果您有多个非零和列,那么强制将不是问题
解决问题的直接方法是在对数据帧进行子集设置时使用
drop=FALSE
:
df <- df[, colSums(df != 0) > 0, drop=FALSE]
df 0,drop=FALSE]
这将告诉R不要将数据帧强制降到最低维度,在本例中,这是一个数值向量。正如您似乎已经注意到的,如果您有多个非零和列,那么强制将不是问题
对于类似的任务,我已经习惯于使用
purr::keep
library(tibble)
library(dplyr)
library(purrr)
df <- read.table(text = "
name Department1 Department2 Department3 Cafeteria lobby_TT lobby_music
James 0 1 0 0 0 0
Flynn 0 1 0 0 0 0
Liam 0 1 0 0 0 0",
header = TRUE, stringsAsFactor = FALSE)
df %>%
column_to_rownames("name") %>%
keep(~all(.x) != 0)
# Department2
# James 1
# Flynn 1
# Liam 1
库(TIBLE)
图书馆(dplyr)
图书馆(purrr)
df%
列到行名称(“名称”)%>%
保持(~all(.x)!=0)
#部门2
#詹姆斯1
#弗林1
#利亚姆1
对于类似的任务,我已经习惯于使用purr::keep
library(tibble)
library(dplyr)
library(purrr)
df <- read.table(text = "
name Department1 Department2 Department3 Cafeteria lobby_TT lobby_music
James 0 1 0 0 0 0
Flynn 0 1 0 0 0 0
Liam 0 1 0 0 0 0",
header = TRUE, stringsAsFactor = FALSE)
df %>%
column_to_rownames("name") %>%
keep(~all(.x) != 0)
# Department2
# James 1
# Flynn 1
# Liam 1
库(TIBLE)
图书馆(dplyr)
图书馆(purrr)
df%
列到行名称(“名称”)%>%
保持(~all(.x)!=0)
#部门2
#詹姆斯1
#弗林1
#利亚姆1
我删除了它,因为一个truecolSums(df)==0
并不一定意味着该列包含所有零。我想,df[colSums(df==0)==0]
会更好。@RichScriven-Right…但我认为如果OP有所有数字都是正数的约束,那就可以了。然后,一个列可以有零和的唯一方法是如果每个数字都是零。我删除了它,因为truecolSums(df)==0
并不一定意味着该列包含所有零。我想,df[colSums(df==0)==0]
会更好。@RichScriven-Right…但我认为如果OP有所有数字都是正数的约束,那就可以了。那么,一个列的和为零的唯一方法就是如果每个数字都为零。