r - 从其他 data.frame R 分配 data.frame 列类

标签 r list class dataframe typeof

我有一个 data.frames sampleList 列表。该列表中的每个 data.frame 在列及其顺序方面都略有不同。

我还有另一个 data.frame refData1,我想将其用作具有相同标题的列类的其余部分的模型。

换句话说,我希望更新 sampleList ,并且任何具有 refData1 的匹配列都应该更改其类并反射(reflect) refData1< 中的类类型 对应的列。不匹配的列应保持原样。请注意,refData1 还包含列表中所有 data.frames 都没有的列。谢谢。

sampleData1 <- data.frame(id = 1:10, 
                          gender = as.factor(sample(c("Male", "Female"), 
                                                    10, replace = TRUE)),
                          age = as.character(rnorm(10, 40, 10)),
                          height = as.character(rnorm(10,170,5)))
sampleData2 <- data.frame(weight = as.character(rnorm(10,80,5)),
                          gender = sample(c("Male", "Female"), 
                                          10, replace = TRUE),
                          id = 11:20, 
                          age = rnorm(10, 44, 10))
sampleData3 <- data.frame(id = as.factor(21:30), 
                          age = as.character(rnorm(10, 36, 10)),
                          gender = sample(c("Male", "Female"), 10, 
                                          replace = TRUE),
                          score = as.character(rnorm(10,20,2)))
sampleList <- list(sampleData1,sampleData2,sampleData3)

refData1 <- data.frame(id = 1:10, # numeric
                       gender1 = as.character(sample(c("Male", "Female"), 
                                                     10, replace = TRUE)),
                       agen = rnorm(10, 40, 10), # numeric
                       height = rnorm(10,170,5), # numeric
                       weight = rnorm(10,80,5),  # numeric
                       other = as.factor(sample(c("a", "b","c"), 
                                                10, replace = TRUE)))

最佳答案

我们循环遍历“sampleList”,获取与“refData1”相交的列,将 data.frame 的设置为“refData1”中的类

sampleListN <- lapply(sampleList, function(x) {
        nm1 <- intersect(names(x), names(refData1))
        x[nm1] <- Map(function(u, v) {class(u) <- class(v)
                               u},
                       x[nm1], refData1[nm1])
         x})

正如@mt1022提到的,如果我们按照逻辑,那么直接转换为整数factor列可能会产生问题,因为我们错误的值,即整数存储值而不是实际值。根据数据,我们甚至不需要与“refData1”进行比较。我们可以使用 type.convert

自动完成此操作
lapply(sampleList, function(x) {
       nm1 <- intersect(names(x), names(refData1))
       x[nm1] <- lapply(x[nm1], function(x)
             type.convert(as.character(x), as.is = TRUE))
       x})

关于r - 从其他 data.frame R 分配 data.frame 列类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787443/

相关文章:

r - R中的不定积分

r - 将条目列添加到 r Shiny 数据表的按钮

用数据帧列表中的唯一序列替换 NA

python - 在python中获取一组二维列表

python - 嵌套类是一种好习惯吗?

r - 预测 LDA 测试集与测试集的长度不同

r - 检查 R 中变量值 (v) 的前一个/连续数字

python - 在不使用 sum() 的情况下打印整数列表的总和

c# - 在类中定义属性

python - 有没有办法遍历并执行 Python 类中的所有函数?