R 剔除因子少于两个的变量

R 剔除因子少于两个的变量,r,apply,sapply,R,Apply,Sapply,我的数据框中的变量具有字符观察值(不确定这是否是正确的表达方式,当我拉出结构时,基本上数据列为“chr”) 我想先把所有东西都转换成因子,然后检查因子级别的数量。一旦它们成为因素,我只想继续使用dataframe中具有两个或更多级别的变量 到目前为止,这是我的想法。我知道for循环在R中是一种禁忌,但我是个新手,使用它对我来说很有意义 x = as.character(c("Not Sampled", "Not Sampled", "Y", "N")) y = as.character(c("N

我的数据框中的变量具有字符观察值(不确定这是否是正确的表达方式,当我拉出结构时,基本上数据列为“chr”)

我想先把所有东西都转换成因子,然后检查因子级别的数量。一旦它们成为因素,我只想继续使用dataframe中具有两个或更多级别的变量

到目前为止,这是我的想法。我知道
for
循环在R中是一种禁忌,但我是个新手,使用它对我来说很有意义

x = as.character(c("Not Sampled", "Not Sampled", "Y", "N"))
y = as.character(c("Not Sampled", "Not Sampled", "Not Sampled", "Not Sampled"))
z = as.character(c("Y", "N", "Not Sampled", "Y"))
df = data.frame(x, y, z)

for i in df:
  df$Response = as.factor(df[,i]) #create new variable in dataframe
  df$Response = df@data[sapply ....  #where I think I can separate out the variables I want and the variables I don't want

  m1 = lm(response ~ 1) #next part where I want only the selected variables
我知道解决方案可能要复杂得多,但这是我的初步尝试。

library(dplyr)
library(dplyr)

df <- df %>% lapply(factor) %>% data.frame()
df[ , sapply(df, n_distinct) >= 2]
df%lappy(因子)%%>%data.frame() df[,sapply(df,n_distinct)>=2]
库(dplyr)
df%lappy(因子)%%>%data.frame()
df[,sapply(df,n_distinct)>=2]

默认的data.frame方法将字符串转换为因子,因此在这种情况下不需要额外的转换
Lappy
更适合于级别比较,因为如果长度相同,
sapply
将尝试将返回值简化为矩阵

df = data.frame(x, y, z)

## Already factors,  use sapply(df, typeof) to see underlying representation
sapply(df, class)  
#        x        y        z 
# "factor" "factor" "factor" 

## These are the indicies with > 2 levels
lengths(lapply(df, levels)) > 2
#    x     y     z 
# TRUE FALSE  TRUE 

## Extract only those columns
df[lengths(lapply(df, levels)) > 2]

默认的data.frame方法将字符串转换为因子,因此在这种情况下不需要额外的转换
Lappy
更适合于级别比较,因为如果长度相同,
sapply
将尝试将返回值简化为矩阵

df = data.frame(x, y, z)

## Already factors,  use sapply(df, typeof) to see underlying representation
sapply(df, class)  
#        x        y        z 
# "factor" "factor" "factor" 

## These are the indicies with > 2 levels
lengths(lapply(df, levels)) > 2
#    x     y     z 
# TRUE FALSE  TRUE 

## Extract only those columns
df[lengths(lapply(df, levels)) > 2]

这种lappy方法不需要dplyr。(如果您想使用dplyr,可以使用
mutate_each
)这种lappy方法不需要dplyr。(如果你想使用dplyr,你可以使用
mutate_each
)这似乎对我有帮助。我试图复制并粘贴它来测试它,但我不确定“长度”是否是一个不同的函数,或者它是否是基本函数“长度”的错别字。我99%确定它是后者,但为了后代的缘故,我想澄清一下。这似乎对我有帮助。我试图复制并粘贴它来测试它,但我不确定“length”是否是一个不同的函数,或者它是否是基本函数“length”的一个拼写错误。我99%确定它是后者,但为了子孙后代,我想澄清一下。