【问题标题】:Is there any way to read data by bytes length in R有没有办法在R中按字节长度读取数据
【发布时间】:2017-07-30 06:39:18
【问题描述】:

有没有办法像 SAS 输入命令一样在 R 中按字节长度读取数据? 当一些多字节字符在一个表中作为固定列长时,

aaa대전11b1
bb 서울21b2
ccc부산갑b3

SAS 可以按字节长度读取它,如下所示。

数据测试;
infile "文件路径";
输入
V1    3 美元。
V2 6 美元。
V3 2 美元。 ;
跑;

aaa, 대전11, b1
bb , 서울21, b2
ccc, 부산갑, b3


但在 R 中,read.fwf 只能按宽度而不是字节长度来分隔数据。

所以,下面的命令

测试

输出错误,或者最好是这样的形状

aaa, 대전11b1, NULL
bb , 서울21b2, NULL
ccc, 부산갑b3

所以,这是我的问题:有没有办法在 R 中按字节长度分隔数据列?

【问题讨论】:

  • 查看此link 并查看readBin() 是否有助于此处进行一些调整。
  • 听起来您不想读取字节,而是读取字符。前两行有 13 个字节,但第三行有 14 个字节。

标签: r sas byte read.fwf


【解决方案1】:

使用下面的代码,您应该获得所需的输出(注意:您可以将此解决方案作为一种解决方法,直到您找到更好的方法!)

file <- readLines("your_data_file.txt",encoding="UTF-8")
newTxt <- unlist(strsplit(file, split = "\u2028"))
newTxt <- lapply(newTxt, function(x) gsub("^([a-zA-Z]*)(.*)([a-zA-Z0-9]{2})$", "\\1,\\2,\\3", x))
df = do.call(rbind.data.frame, newTxt)
names(df) <- "combined_column"

library(tidyr)
df %>% separate(combined_column, c("col1", "col2", "col3"), ",")

输出:

  col1    col2 col3
1  aaa  대전11   b1
2   bb  서울21   b2
3  ccc  부산갑   b3

【讨论】:

  • @resol 如果您喜欢该解决方案,那么您应该接受它作为正确答案。如果他们将来遇到类似的问题,它肯定会帮助其他人。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2019-04-04
相关资源
最近更新 更多