首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将列表转换为多个数据帧,以便只能将每个数据帧的一列转换为数字数据。

将列表转换为多个数据帧,以便只能将每个数据帧的一列转换为数字数据。
EN

Stack Overflow用户
提问于 2014-08-25 16:48:54
回答 1查看 2.1K关注 0票数 3

我刚开始使用R语言编程,我已经有好几天的问题了。我从拆分文件创建的列表开始。这个列表包含了很多数据帧。我能够在其中执行一些操作,比如将一些数据替换为NA,并使用lapply。但是现在,我被困住了,不知道如何转换这个大列表中的数据帧中的一列。

这是我在文件中的一个例子:

代码语言:javascript
复制
d1 <- data.frame(foo = c("a", "b", "c", "d", "e"), bar = as.character(c(4.27, 5.68, 5.52, 5.20, 3.67)))
d2 <- data.frame(bla = c("a", "e", "c"), blu = as.character(c(10.14, 9.88, 10.01)))
d3 <- data.frame(lol = c("p", "s", "q", "r"), pum = as.character(c(5.96, 1.22, -1.61, 5.05)))
d1[, 2] <- as.character(d1[, 2])
d2[, 2] <- as.character(d2[, 2])
d3[, 2] <- as.character(d3[, 2])
file <- list(d1, d2, d3)

它产生了这样的结果:

代码语言:javascript
复制
[[1]]
 foo  bar
1   a 4.27
2   b 5.68
3   c 5.52
4   d  5.2
5   e 3.67

[[2]]
 bla   blu
1   a 10.14
2   e  9.88
3   c 10.01

[[3]]
 lol   pum
1   p  5.96
2   s  1.22
3   q -1.61
4   r  5.05

因此,我希望:

代码语言:javascript
复制
[[1]]
 foo  bar
5   e 3.67
1   a 4.27
4   d  5.2
3   c 5.52
2   b 5.68

[[2]]
 bla   blu
2   e  9.88
3   c 10.01
1   a 10.14

[[3]]
 lol   pum
3   q -1.61
2   s  1.22
4   r  5.05
1   p  5.96

在对此进行排序之后,我将不得不在每个数据帧上提取一个特定的行,但我想,如果我知道如何执行此操作,我可能能够做到这一点。

经过大量的尝试,并在这里找到了一个线程,我终于能够做到这一点:

代码语言:javascript
复制
for(i in 1:length(names(file))){
    assign(paste("df", i, sep = ""), file[[i]])
    }

这段代码允许我分离使用split函数后的数据帧。现在,我想在这个for循环中添加一种方法,将我在一列中的字符数据重新转换为数字数据。我尝试在for循环中使用这样的代码:

代码语言:javascript
复制
df[, 2] <- sapply(df[,2], as.numeric)

但是我得到了一个错误:“闭包”类型对象不是一个子集。

有人能帮忙吗?如果有人能告诉我一个更简单的选择(如果有的话),那将是非常受欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-25 16:58:33

我想你想

代码语言:javascript
复制
lapply(file, function(x) {
    x[[2]] <- as.numeric(x[[2]])        
    x[order(x[[2]]), ]
})

解释:

  • lapply在列表上迭代一个函数
  • file是你的名单,我们正在对它进行操作
  • function(x)是一个“匿名”函数,其中x将是file的每个单独元素。
  • x[[2]] <- as.numeric(x[[2]])将第二列转换为数字
  • x[order(x[[2]]), ]通过第二列对数据帧的行进行排序。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25490632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档