r语言 - cbind 放置 1 而不是字符



我要把R扔出窗外。R很可爱,但有时一个小问题需要几个小时才能解决。

得到这个 df:

Product <- c("Basket", "Basket", "Basket", "Apple", "Apple", "Apple", "Corn", "Corn", "Corn", "Basket")
Place <- c("America", "Europe", "Africa", "America", "Europe", "Africa", "America", "Europe", "Africa", "America")
Detail <- c("Income", "Income", "Outcome", "Outcome", "Income", "Outcome", "Outcome", "Income", "Income", "Outcome")
Valuex <- c(1500, 2000, 2000, 4000, 5000, 700, 4000, 2000, 7000, 450)
df_test <- data.frame(Product, Place, Detail, Valuex, stringsAsFactors = FALSE)

然后,我通过这样做创建另一个data.frame

test <- df_test[1,]

最后,我使用这样的cbind

test[1,1:4] <- cbind(df_test[1,1:2], "Prueba", df_test[1, 4])

当我查看数据框test时,我发现:

Product   Place Detail Valuex
1  Basket America      1   1500

而不是保存"普鲁巴",保存 1。

我已经尝试了as.character("Prueba")c("Prueba")paste("Prueba"),但它仍然放1。

谁能帮我?

您不断看到1代替Preuba的原因是该值正在转换为因子,并且您看到的是水平值。 您可以通过将第一行test分配给stringsAsFactors设置为 false 的cbind调用来避免这种情况,例如

test <- df_test[1,]
df <- cbind(df_test[1,1:2], "Prueba", df_test[1, 4], stringsAsFactors=FALSE)
test[1,] <- df
test
Product   Place Detail Valuex
1  Basket America Prueba   1500

演示

但是,解决问题的更好方法可能是仅将向量分配给test数据框的第一行:

test[1,] <- c(df_test[1,1:2], "Prueba", df_test[1, 4])
test[1,] = c(df_test[1,1:2], "Prueba", df_test[1, 4])

最新更新