【发布时间】:2019-12-06 05:13:46
【问题描述】:
我正在使用 tidyverse 在 R 中执行数据分析和清理。 我有一个包含 23 列的数据框,其中包含值“NO”、“STEADY”、“UP”和“down”。 如果是“NO”、“STEADY”,我想将这 23 列中的所有值更改为 0,在其他情况下更改为 1。
我所做的是,我按名称键创建了一个列表,其中我保留了所有列,之后我使用 for 循环、ifelse 语句和变异。
请看下面的代码
# Column names are kept in the list by name keys
keys = c('metformin', 'repaglinide', 'nateglinide', 'chlorpropamide', 'glimepiride',
'glipizide', 'glyburide', 'pioglitazone', 'rosiglitazone', 'acarbose', 'miglitol',
'insulin', 'glyburide-metformin', 'tolazamide', 'metformin-pioglitazone',
'metformin-rosiglitazone', 'glimepiride-pioglitazone', 'glipizide-metformin',
'troglitazone', 'tolbutamide', 'acetohexamide')
之后,我使用以下代码来获得所需的结果:
for (col in keys){
Dataset = Dataset %>%
mutate(col = ifelse(col %in% c('No','Steady'),0,1)) }
我原以为它会做我需要的更改,但在此之后没有任何反应。 (没有错误消息,也没有想要的结果)
之后,我进一步研究并执行了以下代码
for (col in keys){
print(col)}
它给了我列表中的元素,比如“二甲双胍”
所以,我想 - 可能这就是问题所在。因此,我使用下面的代码将键转换为符号:
keys_new = sym(keys)
之后我再次运行相同的代码:
for (col in keys_new){
Dataset = Dataset %>%
mutate(col = ifelse(col %in% c('No','Steady'),0,1))}
它给了我以下错误-
匹配错误(x, table, nomatch = 0L): 'match' 需要向量参数
毕竟。我还尝试创建一个函数来获得所需的结果,但这也没有奏效:
change = function(name){
Dataset = Dataset %>%
mutate(name = ifelse(name %in% c('No','Steady'),0,1),
name = as.factor(name))
return(Dataset)}
for (col in keys){
change(col)}
这没有执行任何操作。 (没有错误消息,也没有想要的结果)
当keys_new放在这段代码中时:
for (col in keys_new){
change(col)}
我得到了同样的错误:
匹配错误(x, table, nomatch = 0L): 'match' 需要向量参数
请指导
【问题讨论】: