“如何修复”;“$<;-”中出现错误。data.frame`replacement有x行,data有y";?

“如何修复”;“$<;-”中出现错误。data.frame`replacement有x行,data有y";?,r,R,我的目标是创建一个for循环,将数据集中的某些特定列转换为因子或整数 条件将基于列的名称 # Here is a small reproducible dataset df <- data.frame(x = c(10,20,30), y = c("yes", "no", "no"), z = c("Big", "Small", "Average")) # here is a vector that we are going to use inside our if statement

我的目标是创建一个for循环,将数据集中的某些特定列转换为因子或整数

条件将基于列的名称


# Here is a small reproducible dataset
df <- data.frame(x = c(10,20,30), y = c("yes", "no", "no"), z = c("Big", "Small", "Average"))

# here is a vector that we are going to use inside our if statement
column_factor_names <- c("y", "z")

# for each column in df
for (i in names(df)) {

    print(i)

    # if it's a factor, convert into factor, else convert it into integer

    if (i %in% column_factor_names) {
        print("it's a factor")
        df$i <- as.factor(df$i)
    } else {
        print("it's an integer")
        df$i <- as.integer(df$i)
    }
}

我的问题是:为什么它在for循环和if语句中不起作用?

在代码中,子集函数
$
查找名为
i
的列,而不是计算
i
。您可以选择使用
[,i]
[[i]]
对data.frame进行不同的子集划分:

x <- data.frame(x = c(10,20,30), y = c("yes", "no", "no"), z = c("Big", "Small", "Average"))

# here is a vector that we are going to use inside our if statement
column_factor_names <- c("y", "z")

# for each column in df
for (i in names(df)) {

  print(i)

  # if it's a factor, convert into factor, else convert it into integer

  if (i %in% column_factor_names) {
    print("it's a factor")
    x[[i]] <- as.factor(x[[i]])
  } else {
    print("it's an integer")
    x[[i]] <- as.integer(x[[i]])
  }
}

循环部分的正确代码为:

# Here is a small reproducible dataset
df <- data.frame(x = c(10,20,30), y = c("yes", "no", "no"), z = c("Big", "Small", "Average"))

# here is a vector that we are going to use inside our if statement
column_factor_names <- c("y", "z")

for (i in names(df)) {
    print(i)
    if (i %in% column_factor_names) {
        print("it's a factor")
        df[,i] <- as.factor(df[,i])
    } else {
        print("it's an integer")
        df[,i] <- as.numeric(df[,i])
    }
 }
#这是一个可复制的小数据集

df请参阅
帮助(“$”
。无需
forloop
,相关的,可能重复的
x <- data.frame(x = c(10,20,30), y = c("yes", "no", "no"), z = c("Big", "Small", "Average"))

# here is a vector that we are going to use inside our if statement
column_factor_names <- c("y", "z")

# for each column in df
for (i in names(df)) {

  print(i)

  # if it's a factor, convert into factor, else convert it into integer

  if (i %in% column_factor_names) {
    print("it's a factor")
    x[[i]] <- as.factor(x[[i]])
  } else {
    print("it's an integer")
    x[[i]] <- as.integer(x[[i]])
  }
}
x[, i] <- as.factor(x[, i])
# Here is a small reproducible dataset
df <- data.frame(x = c(10,20,30), y = c("yes", "no", "no"), z = c("Big", "Small", "Average"))

# here is a vector that we are going to use inside our if statement
column_factor_names <- c("y", "z")

for (i in names(df)) {
    print(i)
    if (i %in% column_factor_names) {
        print("it's a factor")
        df[,i] <- as.factor(df[,i])
    } else {
        print("it's an integer")
        df[,i] <- as.numeric(df[,i])
    }
 }