【问题标题】:How to convert .csv data in R如何在 R 中转换 .csv 数据
【发布时间】:2021-09-18 03:25:04
【问题描述】:

我找到了一个我想使用的数据集,但数据设置如下:

userid
q1answer\q2answer\q3answer\q4answer\q5answer\q6answer

等等。 有超过 30000 个用户,每个用户大约有 70 个 q。 我需要能够以包含列和行的图表的形式访问数据,即。

userid  q1    q2   q3   q4
id#.    answ answ answ answ

可以这样做吗?

这是我正在使用 R 访问的 .csv 文件。

enter image description here

【问题讨论】:

  • 这不是 CSV:它既没有逗号,也不是统一的柱状......
  • id# 编码在哪里?我看到 q1answer --> q1answer,但没有看到 userid。你能给出一个稍微详细一点的样本吗?可能包含两个或三个唯一的用户 ID。另外,每个用户的答案数量是否相同?
  • 我添加了一张图片,其中包含一个用户的信息,还有 30,000 个其他类似的条目具有不同的值
  • 您的示例数据具有误导性,但我想我理解。将来,请确保您显示的内容与您拥有的相同(例如,您的示例数据不显示任何 \t)。
  • 要清楚,是制表符还是文字字符序列反斜杠-T?

标签: r


【解决方案1】:

样本数据,保存为sampledata 文件:

39886
3   24  4646    3   19
39999
4   25  4647    4   20

(这些是制表符,不是空格。)

代码:

contents <- strsplit(readLines("sampledata"), "\\t")
isuserid <- lengths(contents) == 1
dat <- do.call(rbind,
               lapply(split(contents, cumsum(isuserid)), function(oneuser) {
                 cbind(oneuser[[1]], do.call(rbind, oneuser[-1]))
               }) )
dat <- setNames(as.data.frame(dat), c("user", paste0("q", seq_len(ncol(dat) - 1))))
dat
#    user q1 q2   q3 q4 q5
# 1 39886  3 24 4646  3 19
# 2 39999  4 25 4647  4 20

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2019-02-22
    • 1970-01-01
    相关资源
    最近更新 更多