我在做一个简单的任务时遇到了困难:
假设我使用这些库并拥有以下数据框架:
library(tidyverse)
library(dataPreparation)
df <- data.frame(col1 = 1, col2 = rnorm(1e1), col3 = sample(c(1, 2), 1e1, replace = TRUE))
df$col4 <- df$col2
df$col5[df$col3 == 1] = "a"
df$col5[df$col3 == 2] = "b"
df$col6 = c("b","b","a","a","b","a","a","a","a","b")
df$col7 = "d"
df$col8 = c(3,3,5,5,3,5,5,5,5,3)
df$col9 = c("x","x","y","y","x","y","y","y","y","x")
df$col10 = c("p","p","q","p","q","q","p","p","q","q")
df$col11 = c(10.5,10.5,11.37,10.5,11.37,11.37,10.5,10.5,11.37,11.37)
df <- df %>% mutate_if(is.character,as.factor)使用下面的命令,我希望从df中删除列4、5、7、8、9、11。
whichAreBijection(df)
[1] "whichAreBijection: col7 is a bijection of col1. I put it in drop list."
[1] "whichAreBijection: col4 is a bijection of col2. I put it in drop list."
[1] "whichAreBijection: col5 is a bijection of col3. I put it in drop list."
[1] "whichAreBijection: col8 is a bijection of col6. I put it in drop list."
[1] "whichAreBijection: col9 is a bijection of col6. I put it in drop list."
[1] "whichAreBijection: col11 is a bijection of col10. I put it in drop list."
[1] "whichAreBijection: it took me 0.08s to identify 6 column(s) to drop."
[1] 4 5 7 8 9 11我可以通过使用
df$col4 = NULL
df$col5 = NULL
df$col7 = NULL
df$col8 = NULL
df$col9 = NULL
df$col11 = NULL但是,我想要算法自动完成它。
首先,我尝试生成包含whichAreBijection提议的列号的数据帧m,然后最终将其从df中删除,但结果却没有显示出任何地方:
x <- whichAreBijection(df)
y <- length(x)
m <- as.data.frame(matrix(0, ncol = y, nrow = nrow(df)))
i = 1
while (i< y+1) {
# z <- names(df)[x[i]]
m[,i] <- df[,x[i]]
i<- i+1
}以上所述生成的m具有由4、5、7、8、9、11提供的常量条目。
我看到使用一个简单的命令,如
m[,1] <- df[,4]将m的第一列完全替换为df的第4列。
我遇到的第二个问题是在m中使用与df相同的列名。也许这听起来是完成简单任务的很长一段路。
为什么没有在m中准确地替换列? whichAreBijection?
发布于 2020-04-10 17:35:20
我能够用以下方法处理问题1:
x <- whichAreBijection(df)
y <- length(x)
m <- as.data.frame(matrix(0, ncol = y, nrow = nrow(df)))
i = 1
while (i< y+1) {
m[,i] <- df[,x[i], with = FALSE]
i<- i+1
}似乎命名的列索引值不起作用,而整数列索引则在右侧工作,我的意思是xi。这个麻烦可以通过在结尾处设置为= FALSE来避免。
问题2是下一个挑战。
https://stackoverflow.com/questions/61117577
复制相似问题