【问题标题】:How to import data from ascii file into a vector in R?如何将ascii文件中的数据导入R中的向量?
【发布时间】:2019-06-12 19:36:02
【问题描述】:

我不知道如何将数据从 ASCII 文件导入向量。 这是我的数据样子:

42019*1 3738.937 21*1 3413.974 20*1 3439.52 3287.071 20*1 3078.413 3144.528 20*1 2695.402 2817.517 20*1 2360.609 2535.899 20*1 1973.107 2423.964 20*1 1853.081 2405.671 20*1 1910.165 2377.648 20*1 2003.988 2587.324 21*1 2756.768 21*1 2759.812 21*1 2751.675 21*1 2805.15 21*1 2860.665 21*1 2977.085 21*1 3095.787 10473*1 3095.787 10473*1 4208.778.778.778.778.778.778 21*1 4263.975244.444.444.44.44.4444.444.444.444.444.4444.444.444. in *1 3995.481 3698.043 20*1 3501.637 3549.6 20*1 3080.588 3484.296 20*1 2809.161 3449.817 20*1 2584.879 3279.022 4782.676 19*1 2242.631 3180.007 4912.585 19*1 2150.003 3198.538 4964.336 19*1 2453.268 3326.228 4950.596 19*1 2572.416 3600.228 5072.902 19*1 2561.87 4009.568 5311.883 19*1 2778.983 4139.855 5447.728 19*1 2934.39 4152.131 5349.623 19*1 2914.206 4217.744 5426.702 19*1 2842.173 4228.848 5542.386 19*1 2729.679 3995.736 5315.139 19*1 2791.181 3939.073 4855.432 19*1 2906.625 4063.82 4518 3243.637 18*1 2804.122 4068.833 4339.896 3472.643 18*1 2873.355 4011.656 4219.517 3815.508 18*1 3177.821 4065.067 4017.852 4094.735 18*1 3523.447 4123.344 3912.661 4196.315 18*1 3657.643 4033.419 3906.543 4135.803 18*1 3692.156 3850.777 3795.754 3977.24 18*1 3689.029 3866.12 3570.128 3656.568 18*1 3631.752 3889.502 3514.744 3369.104 18*1 3511.714 3689.989 3705.094 3226.042 18*1 3430.077 3366.809 3930.563 3212.605 18*1 3404.816 3014.06 18*1 3264.212 2988.194 3597.519 2922.759 18*1 3248.592 2898.228 3355.479 2799.94 18*1 3344.334 2835.604 2973.876 2693.686 18*1 3286.128 2817.112 2689.906 2621.489 16*1 4764.407 1 3171.498 2770.62 2608.038 2584.703 16*1 4462.878 1 3203.648 2696.728 2506.159 2577.2 16*1 4122.297 1 3148.35 2680.205 2488.023 2603.228 15*1 4091.906 3782.092 1 2984.83 2694.59 2694.59 2631.974 2647.052 1552 15*1 3780.004 3512.631 272.631129.647.647.641729.647.647.647.647.647.67.67.69.67 请注意,42019*1 表示 1 重复了 42019 次。没有列,只有一列。

我试过parse.SAScii和read.SASciifunction,但是有错误:

parse.SAScii("text2.data", beginline = 2)

x <- read.SAScii("text2.data", beginline = 2)

Error in if (max(asterisk_slash) < 0) SASinput[j] <- "" else SASinput[j] <- sub(substr(SASinput[j],  : 
  missing value where TRUE/FALSE needed

【问题讨论】:

  • 我可能会感到困惑,但您的文件是 ASCII 文件(如文本)还是来自 SAS 的文件?
  • 谢谢你,乔兰!这是一个 ASCII 文件。我正在尝试上传数据。你能告诉我如何上传数据吗?
  • 好吧,我想你已经锁定了这个特殊的功能,只是因为它里面有“ascii”这个词,但我认为你没有仔细查看它的文档。该功能似乎用于解析特殊的 SAS 文件,而不是文本数据文件。通常,我们会使用read.table 之类的函数将数据读入 R,但具体操作方式取决于文件的结构,而您根本没有描述。编辑您的问题以包含该信息。逗号分隔?制表符分隔?等
  • 我按照你的要求做了。有什么线索吗?
  • 因此,如果您在文本编辑器中打开文件,所有值都将显示在单个列中,并且第一个条目实际上是 42019*1?

标签: r vector import ascii


【解决方案1】:

我正在考虑您想要的输出是一个向量,其中 42019*1 之类的情况变成 rep(1,4209) 之类的情况,而 3738.937 之类的情况保持不变。

如果是这样,这是一个选项:

string = "42019*1 3738.937 21*1 3413.974 20*1 3439.52 3287.071 20*1 3078.413 3144.528 20*1 2695.402 2817.517 20*1 2360.609 2535.899 20*1 1973.107 2423.964 20*1 1853.081 2405.671 20*1 1910.165 2377.648 20*1 2003.988 2587.324 21*1 2756.768 21*1 2759.812 21*1 2751.675 21*1 2805.15 21*1 2860.665 21*1 2977.085 21*1 3095.787 10473*1 4208.778 21*1 4263.975 21*1 4409.382 21*1 4576.375 21*1 4310.54 21*1 3995.481 3698.043 20*1 3501.637 3549.6 20*1 3080.588 3484.296 20*1 2809.161 3449.817 20*1 2584.879 3279.022 4782.676 19*1 2242.631 3180.007 4912.585 19*1 2150.003 3198.538 4964.336 19*1 2453.268 3326.228 4950.596 19*1 2572.416 3600.228 5072.902 19*1 2561.87 4009.568 5311.883 19*1 2778.983 4139.855 5447.728 19*1 2934.39 4152.131 5349.623 19*1 2914.206 4217.744 5426.702 19*1 2842.173 4228.848 5542.386 19*1 2729.679 3995.736 5315.139 19*1 2791.181 3939.073 4855.432 19*1 2906.625 4063.82 4518 3243.637 18*1 2804.122 4068.833 4339.896 3472.643 18*1 2873.355 4011.656 4219.517 3815.508 18*1 3177.821 4065.067 4017.852 4094.735 18*1 3523.447 4123.344 3912.661 4196.315 18*1 3657.643 4033.419 3906.543 4135.803 18*1 3692.156 3850.777 3795.754 3977.24 18*1 3689.029 3866.12 3570.128 3656.568 18*1 3631.752 3889.502 3514.744 3369.104 18*1 3511.714 3689.989 3705.094 3226.042 18*1 3430.077 3366.809 3930.563 3212.605 18*1 3404.816 3195.999 3901.077 3133.576 18*1 3373.697 3086.668 3754.917 3014.06 18*1 3264.212 2988.194 3597.519 2922.759 18*1 3248.592 2898.228 3355.479 2799.94 18*1 3344.334 2835.604 2973.876 2693.686 18*1 3286.128 2817.112 2689.906 2621.489 16*1 4764.407 1 3171.498 2770.62 2608.038 2584.703 16*1 4462.878 1 3203.648 2696.728 2506.159 2577.2 16*1 4122.297 1 3148.35 2680.205 2488.023 2603.228 15*1 4091.906 3782.092 1 2984.83 2694.59 2631.974 2647.052 15*1 3780.004 3512.631 1 2905.647 2722.086 2701.115 2732.39 15*1 3617.159"
splitted = as.list(strsplit(string," ")[[1]])

for(i in 1:length(splitted)){
  if(grepl("*",splitted[[i]],fixed=T)){
    aux = strsplit(splitted[[i]],"*",fixed=T)[[1]]
    splitted[[i]] = rep(as.numeric(aux[2]),as.numeric(aux[1]))
  }
  else{
    splitted[[i]] = as.numeric(splitted[[i]])  
  }
}

【讨论】:

  • 谢谢!我的数据在 *.data 文件中。如何将它们导入单个字符串?
  • 使用 R 我不确定。你可以试试read.table() 看看导入了什么样的数据。没有文件很难分辨。
  • 我受到您的想法的启发并找到了解决方案:data ",splitted[[i]],fixed=T)){ aux ",fixed=T)[[1]] data1
猜你喜欢
  • 2015-02-13
  • 2013-06-13
  • 2019-01-11
  • 1970-01-01
  • 2015-08-30
  • 2010-12-29
  • 2021-03-20
  • 2020-04-21
  • 1970-01-01
相关资源
最近更新 更多