【问题标题】:Applying paste() to a data.frame将 paste() 应用于 data.frame
【发布时间】:2016-02-04 14:49:45
【问题描述】:

我有一个数字 data.frame,我想通过在每个元素后面粘贴 % 来更改它。

A <- data.frame(A = seq(1,10,1))
apply(A,1, function(x) paste0(A[x,],"%"))

这很好用,但是如果数据有小数位,apply 会将每个条目加倍。

 B <- data.frame(B = seq(1,5.5,0.5))
apply(B,1, function(x) paste0(B[x,],"%"))

它适用于dplyr:

require(dplyr)
B %>% mutate(B = paste0(B,"%"))

但我想了解应用解决方案失败的原因。

【问题讨论】:

  • 因为您是按值而不是位置进行子集化。试试B[1.5] 看看评估器如何处理十进制子集。
  • 试试apply(B, 1, function(x) paste0(x,"%"))
  • @PierreLafortune 有道理,感谢您的解释。

标签: r dplyr apply


【解决方案1】:

你可以试试

sapply(B,paste0,"%")

由于 OP 中的数据框示例由单个向量组成,因此证明这适用于一般数据框可能很有用:

B <- data.frame(x1 = seq(1,10,1), x2=seq(1,5.5,0.5))
sapply(B,paste0,"%")
#      x1    x2    
# [1,] "1%"  "1%"  
# [2,] "2%"  "1.5%"
# [3,] "3%"  "2%"  
# [4,] "4%"  "2.5%"
# [5,] "5%"  "3%"  
# [6,] "6%"  "3.5%"
# [7,] "7%"  "4%"  
# [8,] "8%"  "4.5%"
# [9,] "9%"  "5%"  
#[10,] "10%" "5.5%"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2016-03-20
    • 2017-01-16
    • 1970-01-01
    • 2018-07-17
    • 2012-05-25
    相关资源
    最近更新 更多