【问题标题】:Removing Percentages from a Data Frame从数据框中删除百分比
【发布时间】:2013-01-01 08:16:54
【问题描述】:

我有一个源自 excel 文件的数据框。它在列上方有通常的标题,但有些列中有 % 符号,我想删除它们。

搜索 stackoverflow 提供了一些很好的代码,用于从矩阵中删除百分比,Any way to edit values in a matrix in R?,当我尝试将它应用于我的数据框时,它不起作用

as.numeric(gsub("%", "", my.dataframe))

相反,它只返回一串“NA”,并带有一条警告消息,说明它们是由强制引入的。当我申请时,

gsub("%", "", my.dataframe))

我得到了“c(...)”形式的值,其中 ... 代表数字,后跟逗号,为我拥有的每一列复制。没有 % 是有证据的;如果我能把它重新组合起来……我会做饭的。

任何帮助都得到了极大的帮助,谢谢。

【问题讨论】:

  • 像往常一样,除非您提供数据供我们使用,否则很难提供太多帮助。 dput(head(...)) 通常很有用。
  • 听起来您的 data.frame 中也可能有因素。尝试在将 stringsAsFactors 设置为 FALSE 时读取它: read.table(file="file.csv", stringsAsFactors = FALSE)
  • @tcash21 stringsAsFactors = FALSE 不能解决问题,因为一旦您读取数据然后应用 Arun 的解决方案,生成的 data.frame 将仅包含因子,数字元素将被强制为因子,因此解决方案是使用 Arun 的建议并在 sapply 调用中添加 as.numeric

标签: regex r dataframe


【解决方案1】:

根据@Arun 的评论和想象你的 data.frame 的样子:

> DF <- data.frame(X = paste0(1:5,'%'), 
                   Y = paste0(2*(1:5),'%'),
                   Z = 3*(1:5), stringsAsFactors=FALSE )

> DF # this is how I imagine your data.frame looks like
   X   Y  Z
1 1%  2%  3
2 2%  4%  6
3 3%  6%  9
4 4%  8% 12
5 5% 10% 15

> # Using @Arun's suggestion
> (DF2 <- data.frame(sapply(DF, function(x) as.numeric(gsub("%", "", x)))))
  X  Y  Z
1 1  2  3
2 2  4  6
3 3  6  9
4 4  8 12
5 5 10 15

我在sapply 调用中添加了as.numeric,要求结果列是数字,如果我不使用as.numeric,结果将是factor。使用sapply(DF2, class)查看它

【讨论】:

  • 感谢@Jiber 和其他所有人(我只能提到一个人)。上面的代码就像一个魅力。有人说,“像往常一样没有数据”为此道歉,但我正在使用的数据是专有的;它来自许多实验。事实上,清理后的数据一式三份。我很可能不得不开始另一个问题线程,但是,我怎样才能通过找到值 1:3、4:6、7:9 等的平均值将我的三份数据减少到三分之一的大小,直到我达到 22: 24 并将所有内容保存在新的数据框中?
  • @user1945827 如果此答案满足您的需求,请考虑通过在绿色对勾中执行 clic 来接受它
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2016-08-08
  • 1970-01-01
相关资源
最近更新 更多