【问题标题】:R convert all rows to stringsR将所有行转换为字符串
【发布时间】:2013-02-12 10:55:07
【问题描述】:

我需要将数据框的所有行都转换为字符串。

这是一个示例数据:

1.12331,4.331123,4.12335435,1,"asd"
1.123453345,5.654456,4.889999,1.45456,"qwe"
2.00098,5.5445,4.768799,1.999999,"ttre"

我将这些数据读入 R,得到一个数据框。

td<-read.table("test.csv", sep=',')

当我对这些数据运行apply(td, 2, as.character) 时,我得到了

    V1       V2       V3       V4       V5    
[1,] "1.1233" "4.3311" "4.1234" "1.0000" "asd" 
[2,] "1.1235" "5.6545" "4.8900" "1.4546" "qwe" 
[3,] "2.0010" "5.5445" "4.7688" "2.0000" "ttre"

但是当我只在数字列上做同样的事情时,我得到了不同的结果:

apply(td[,1:4], 2, as.character)

     V1            V2         V3           V4        
[1,] "1.12331"     "4.331123" "4.12335435" "1"       
[2,] "1.123453345" "5.654456" "4.889999"   "1.45456" 
[3,] "2.00098"     "5.5445"   "4.768799"   "1.999999"

因此,我需要一个与源文件中的值完全相同的数据框。我做错了什么?

【问题讨论】:

  • 正如其他答案所暗示的那样,以正确的格式读取数据是解决此问题的推荐方法,但对于它的价值,data.frame(lapply(td, as.character), stringsAsFactors=FALSE) 也应该有效。

标签: string r dataframe


【解决方案1】:

您可以在read.table()中设置colClasses,使所有列都为character

 td <- read.table("test.csv", sep=',',colClasses="character")
 td
           V1       V2         V3       V4   V5
1     1.12331 4.331123 4.12335435        1  asd
2 1.123453345 5.654456   4.889999  1.45456  qwe
3     2.00098   5.5445   4.768799 1.999999 ttre

 str(td)
'data.frame':   3 obs. of  5 variables:
 $ V1: chr  "1.12331" "1.123453345" "2.00098"
 $ V2: chr  "4.331123" "5.654456" "5.5445"
 $ V3: chr  "4.12335435" "4.889999" "4.768799"
 $ V4: chr  "1" "1.45456" "1.999999"
 $ V5: chr  "asd" "qwe" "ttre"

【讨论】:

    【解决方案2】:

    最好的方法是首先将数据作为字符读取。您可以使用 read.table 的 colClasses 参数来做到这一点:

    td <- read.table("test.csv", sep=',', colClasses="character")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多