【发布时间】:2020-08-22 19:29:44
【问题描述】:
我有一个包含 82 列的数据集。
我正在尝试编写一个函数,它将列名作为参数 (x),然后将该列中的名称转换为一个数字。每列唯一名称的数量不同。
样本数据:
df <- data.frame(column_1 = 1:10, column_2 = c("MT", "BM", "KA", "MT", "BM", "KA","MT", "BM", "KA", "MT"))
我预期的结果是这个函数将 column_2 转换为:
1,2,3,1,2,3,1,2,3,1
当我测试函数的主体时,它做了它应该做的事情: 1) 仅当它是字符且没有 NA 时才应用该功能 2)选择唯一值 3) 将该唯一值替换为从 1 到 n 的数字
UniekeNamen <- unique(VolledigeSet$MSZoning)
VervangenVoor <- c(1:length(VolledigeSet$MSZoning))
if (is.character(VolledigeSet$MSZoning) & sum(is.na(VolledigeSet$MSZoning) == 0)) {
for (i in seq_along(UniekeNamen)) {
VolledigeSet$MSZoning[VolledigeSet$MSZoning == UniekeNamen[i]] <- VervangenVoor[i]
}
}
但是,当我将主体封装在函数中,并用列名替换参数 x 时,函数无法工作,就好像无法识别参数一样。没有错误消息,只是没有任何反应......
这是我写的函数:
name2num <- function(x) {
UniekeNamen <- unique(x)
VervangenVoor <- c(1:length(UniekeNamen))
if (is.character(x) & sum(is.na(x) == 0)) {
for (i in seq_along(UniekeNamen)) {
x[x == UniekeNamen[i]] <- VervangenVoor[i]
}
}
}
你有什么建议改变这个函数吗?
提前致谢!
【问题讨论】:
-
主要问题是函数没有
return值...正在寻找答案。 -
提示:如果您将
column_2转换为factor(df$column_2 <- as.factor(df$column_2),您将能够使用levels(df$column_2) <- 1:length(levels(df$column_2))获得结果。