【问题标题】:How to import single-column CSV as an array in R? (values importing as column names)如何在 R 中将单列 CSV 作为数组导入? (作为列名导入的值)
【发布时间】:2022-01-18 03:50:21
【问题描述】:

我有一个由 1000 个个位数整数组成的“倒置”逗号分隔列表。我要做的是生成每个整数的计数,以及显示它们分布的直方图。

例如3,1,3,2,1,2,1,1,0,3,1,2,0,2,1,1,2,1,2,1,2,0,0,1,....

但是,当我 read.csv() 时,R 会生成一个数据框,其中包含 0 个对 1000 个变量的观察,我的数字作为列名。

如何将这种非常规的数据格式作为单列数据框/数组引入?我试过x <- x[-1, ]

TIA!

【问题讨论】:

  • 最好使用scan("filename.csv", sep = ",") 将其作为向量读取。
  • 谢谢! scan() %>% as.data.frame() 解决了我的问题!

标签: r csv


【解决方案1】:

正如 cmets 中所指出的,scan("filename.csv", sep = ",") 是通往这里的路。

以下代码生成一个直方图,并打印出每个值在数据中所占的比例。

library(tidyverse)

x = scan("text.csv", sep=",")
N = length(x)
df <- as.data.frame(x)
ggplot(df) + geom_histogram(aes(x=x))
count(df, x) %>% mutate(n=n/N)

输出:

  x     n
1 0 0.171
2 1 0.352
3 2 0.319
4 3 0.158

...证实我怀疑 JS 中的 Math.round(Math.random() * N) 不统一,并且由于四舍五入而未充分代表边界(在本例中为 0 和 3)。 0.6 到 1。当然,所有这些都是有规律的,因为我应该一直使用 Math.floor() ! :)

使用 Math.floor() 而不是 Math.round() 运行相同的测试会截断顶部的数字,但会产生更均匀的结果:

【讨论】:

    猜你喜欢
    • 2019-04-16
    • 2018-02-25
    • 2015-07-04
    • 2023-01-18
    • 2015-07-06
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多