我想将具有特定字符串代码的某些列转换为同一data.frame中的因子。但是,我对将data.frame列引用传递给我的函数的初始任务感到困扰。通过示例here及其链接页面,我相信以下内容应该有效:
<div id= "one"><button class="button" id = "b1"></button></div>
但是,此操作的结果是#feed string to function
set.seed(42)
df <- data.frame(
chr1 = sample(letters[1:4], 10, T),
chr2 = sample(letters[4:7], 10, T),
stringsAsFactors = F
)
tofactor <- function(dat,column) {
dat[,column] <- as.factor(dat[,column])
}
tofactor(df, "chr1")
typeof(df$chr1)
的字符串编码的持久性。我也尝试使用双方括号方法的参考没有成功。
感谢您的协助。
答案 0 :(得分:0)
该功能正常运行,您需要做的就是将输出分配给原始(或新的df)。
df <- tofactor(df, "chr1")
如果你运行str(tofactor(df,"chr1"))
,你会得到回报:
Factor w/ 4 levels "a","b","c","d": 4 4 2 4 3 3 3 1 3 3
答案 1 :(得分:0)
另一种方法是使用mutate_at
并指定var
内的变量:
library(dplyr)
df <- data.frame(
chr1 = sample(letters[1:4], 10, T),
chr2 = sample(letters[4:7], 10, T),
stringsAsFactors = F
)
df2 <- df %>%
mutate_at(vars(chr1), as.factor)
class(df2$chr1) #[1] "factor"
答案 2 :(得分:0)
在更好地了解范围并向同事指示assign()
之后,我已经到达:
set.seed(42)
df <- data.frame(
chr1 = sample(letters[1:4], 10, T),
chr2 = sample(letters[4:7], 10, T),
stringsAsFactors = F
)
tofactor <- function(dat,column) {
dat[,column] <- as.factor(dat[,column])
assign("df",dat, envir = .GlobalEnv)
}
tofactor(df, "chr1")
typeof(df$chr1)
此解决方案处理函数中的替换,允许重复使用,而无需在另外的步骤中分配输出。