有没有办法在R中按字节长度读取数据
Is there any way to read data by bytes length in R
有没有像SAS输入命令那样在R中按字节长度读取数据的方法?
当一些多字节字符在table作为固定列长度时,
aaa대전11b1
bb 서울21b2
ccc부산갑b3
SAS 可以按字节长度读取它,如下所示。
数据测试;
infile "filepath";
输入
V1 $3.
V2 6 美元。
V3 2 美元。 ;
运行;
→
aaa, 대전11, b1
bb , 서울21, b2
ccc, 부산갑, b3
但是在 R 中,read.fwf 只能按宽度而不是字节长度来分隔数据。
所以,像下面这样的命令
测试 <- read.fwf("file path", 宽度=c(3,6,2))
输出错误,或者最多像这样
aaa, 대전11b1, NULL
bb , 서울21b2, NULL
ccc, 부산갑b3
所以,这是我的问题:在 R 中有什么方法可以按字节长度分隔数据列吗?
使用下面的代码你应该得到想要的输出(注意:你可以使用这个解决方案作为解决方法,直到你找到更好的方法!)
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
有没有像SAS输入命令那样在R中按字节长度读取数据的方法? 当一些多字节字符在table作为固定列长度时,
aaa대전11b1
bb 서울21b2
ccc부산갑b3
SAS 可以按字节长度读取它,如下所示。
数据测试;
infile "filepath";
输入
V1 $3.
V2 6 美元。
V3 2 美元。 ;
运行;
→
aaa, 대전11, b1
bb , 서울21, b2
ccc, 부산갑, b3
但是在 R 中,read.fwf 只能按宽度而不是字节长度来分隔数据。
所以,像下面这样的命令
测试 <- read.fwf("file path", 宽度=c(3,6,2))
输出错误,或者最多像这样
aaa, 대전11b1, NULL
bb , 서울21b2, NULL
ccc, 부산갑b3
所以,这是我的问题:在 R 中有什么方法可以按字节长度分隔数据列吗?
使用下面的代码你应该得到想要的输出(注意:你可以使用这个解决方案作为解决方法,直到你找到更好的方法!)
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