基于R中的行拆分数据帧
我有一个PDF格式的表格。我将其转换为CSV,以下是CSV内容基于R中的行拆分数据帧,r,R,我有一个PDF格式的表格。我将其转换为CSV,以下是CSV内容 A 23 45 53 34 62 87 94 75 B 120 61 113 41 109 48 90 95 123 113 112 101 我将CSV加载到R中,但数据帧不是预期的 A 23 45 53 34 62 87 94 75 B 120 61 113 41 109 48 90 95 123 113 112 101 如何在数据帧中拆分
A 23 45 53 34
62 87 94 75
B 120 61 113 41
109 48 90 95
123 113 112 101
我将CSV加载到R中,但数据帧不是预期的
A 23 45 53 34 62 87 94 75
B 120 61 113 41 109 48 90 95 123 113 112 101
如何在数据帧中拆分行。感谢您的帮助
最后,我试图实现以下目标:
A1 23 45 53 34
A2 62 87 94 75
B1 120 61 113 41
B2 109 48 90 95
B3 123 113 112 101
非常感谢这可能有用,但您确实没有提供足够的信息来确定
dat <- readLines("thefile.csv")
prev.x <- ""
ctr <- 1
df <- ldply(strsplit(dat, "\ +"), function(x) {
if (nchar(x[1]) == 0) {
x[1] <- prev.x
ctr <- ctr + 1
} else {
prev.x <<- x[1]
ctr <- 1
}
x[1] <- sprintf("%s%d", x[1], ctr)
return(as.data.frame(matrix(x, nrow=1)))
})
colnames(df) <- c("ltr", "v1", "v2", "v3", "V4")
df <- df[complete.cases(df),]
df
dat这可能有效,但您确实没有提供足够的信息来确定
dat <- readLines("thefile.csv")
prev.x <- ""
ctr <- 1
df <- ldply(strsplit(dat, "\ +"), function(x) {
if (nchar(x[1]) == 0) {
x[1] <- prev.x
ctr <- ctr + 1
} else {
prev.x <<- x[1]
ctr <- 1
}
x[1] <- sprintf("%s%d", x[1], ctr)
return(as.data.frame(matrix(x, nrow=1)))
})
colnames(df) <- c("ltr", "v1", "v2", "v3", "V4")
df <- df[complete.cases(df),]
df
dat这可能有效,但您确实没有提供足够的信息来确定
dat <- readLines("thefile.csv")
prev.x <- ""
ctr <- 1
df <- ldply(strsplit(dat, "\ +"), function(x) {
if (nchar(x[1]) == 0) {
x[1] <- prev.x
ctr <- ctr + 1
} else {
prev.x <<- x[1]
ctr <- 1
}
x[1] <- sprintf("%s%d", x[1], ctr)
return(as.data.frame(matrix(x, nrow=1)))
})
colnames(df) <- c("ltr", "v1", "v2", "v3", "V4")
df <- df[complete.cases(df),]
df
dat这可能有效,但您确实没有提供足够的信息来确定
dat <- readLines("thefile.csv")
prev.x <- ""
ctr <- 1
df <- ldply(strsplit(dat, "\ +"), function(x) {
if (nchar(x[1]) == 0) {
x[1] <- prev.x
ctr <- ctr + 1
} else {
prev.x <<- x[1]
ctr <- 1
}
x[1] <- sprintf("%s%d", x[1], ctr)
return(as.data.frame(matrix(x, nrow=1)))
})
colnames(df) <- c("ltr", "v1", "v2", "v3", "V4")
df <- df[complete.cases(df),]
df
dat这样行吗
x <-read.csv("your-file.csv", header=F)
h=vector("character",nrow(x))
n=1; p=NA
for (i in 1:nrow(x)) {
if (""==x$V1[i]) { n=n+1; z = p} else { n = 1; z = p = x$V1[i] }
h[i] = paste0(z,n)
}
x$V1 <- h
x这样行吗
x <-read.csv("your-file.csv", header=F)
h=vector("character",nrow(x))
n=1; p=NA
for (i in 1:nrow(x)) {
if (""==x$V1[i]) { n=n+1; z = p} else { n = 1; z = p = x$V1[i] }
h[i] = paste0(z,n)
}
x$V1 <- h
x这样行吗
x <-read.csv("your-file.csv", header=F)
h=vector("character",nrow(x))
n=1; p=NA
for (i in 1:nrow(x)) {
if (""==x$V1[i]) { n=n+1; z = p} else { n = 1; z = p = x$V1[i] }
h[i] = paste0(z,n)
}
x$V1 <- h
x这样行吗
x <-read.csv("your-file.csv", header=F)
h=vector("character",nrow(x))
n=1; p=NA
for (i in 1:nrow(x)) {
if (""==x$V1[i]) { n=n+1; z = p} else { n = 1; z = p = x$V1[i] }
h[i] = paste0(z,n)
}
x$V1 <- h
x另一种可能性:
# read data
df <- read.table(text = "A 23 45 53 34 62 87 94 75
B 120 61 113 41 109 48 90 95 123 113 112 101", fill = TRUE)
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
# 1 A 23 45 53 34 62 87 94 75 NA NA NA NA
# 2 B 120 61 113 41 109 48 90 95 123 113 112 101
# from df, remove first column
# then, make a four-column matrix of the non-NA values in each row
l <- apply(df[ , -1], 1, function(x) matrix(na.omit(x), ncol = 4, byrow = TRUE))
l
# [[1]]
# [,1] [,2] [,3] [,4]
# [1,] 23 45 53 34
# [2,] 62 87 94 75
#
# [[2]]
# [,1] [,2] [,3] [,4]
# [1,] 120 61 113 41
# [2,] 109 48 90 95
# [3,] 123 113 112 101
# add id column
lapply(seq_along(l), function(x){
cbind.data.frame(id = paste0(df$V1[x], seq(from = 1, to = nrow(l[[x]]))), l[[x]])
})
# [[1]]
# id 1 2 3 4
# 1 A1 23 45 53 34
# 2 A2 62 87 94 75
#
# [[2]]
# id 1 2 3 4
# 1 B1 120 61 113 41
# 2 B2 109 48 90 95
# 3 B3 123 113 112 101
#读取数据
df另一种可能性:
# read data
df <- read.table(text = "A 23 45 53 34 62 87 94 75
B 120 61 113 41 109 48 90 95 123 113 112 101", fill = TRUE)
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
# 1 A 23 45 53 34 62 87 94 75 NA NA NA NA
# 2 B 120 61 113 41 109 48 90 95 123 113 112 101
# from df, remove first column
# then, make a four-column matrix of the non-NA values in each row
l <- apply(df[ , -1], 1, function(x) matrix(na.omit(x), ncol = 4, byrow = TRUE))
l
# [[1]]
# [,1] [,2] [,3] [,4]
# [1,] 23 45 53 34
# [2,] 62 87 94 75
#
# [[2]]
# [,1] [,2] [,3] [,4]
# [1,] 120 61 113 41
# [2,] 109 48 90 95
# [3,] 123 113 112 101
# add id column
lapply(seq_along(l), function(x){
cbind.data.frame(id = paste0(df$V1[x], seq(from = 1, to = nrow(l[[x]]))), l[[x]])
})
# [[1]]
# id 1 2 3 4
# 1 A1 23 45 53 34
# 2 A2 62 87 94 75
#
# [[2]]
# id 1 2 3 4
# 1 B1 120 61 113 41
# 2 B2 109 48 90 95
# 3 B3 123 113 112 101
#读取数据
df另一种可能性:
# read data
df <- read.table(text = "A 23 45 53 34 62 87 94 75
B 120 61 113 41 109 48 90 95 123 113 112 101", fill = TRUE)
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
# 1 A 23 45 53 34 62 87 94 75 NA NA NA NA
# 2 B 120 61 113 41 109 48 90 95 123 113 112 101
# from df, remove first column
# then, make a four-column matrix of the non-NA values in each row
l <- apply(df[ , -1], 1, function(x) matrix(na.omit(x), ncol = 4, byrow = TRUE))
l
# [[1]]
# [,1] [,2] [,3] [,4]
# [1,] 23 45 53 34
# [2,] 62 87 94 75
#
# [[2]]
# [,1] [,2] [,3] [,4]
# [1,] 120 61 113 41
# [2,] 109 48 90 95
# [3,] 123 113 112 101
# add id column
lapply(seq_along(l), function(x){
cbind.data.frame(id = paste0(df$V1[x], seq(from = 1, to = nrow(l[[x]]))), l[[x]])
})
# [[1]]
# id 1 2 3 4
# 1 A1 23 45 53 34
# 2 A2 62 87 94 75
#
# [[2]]
# id 1 2 3 4
# 1 B1 120 61 113 41
# 2 B2 109 48 90 95
# 3 B3 123 113 112 101
#读取数据
df另一种可能性:
# read data
df <- read.table(text = "A 23 45 53 34 62 87 94 75
B 120 61 113 41 109 48 90 95 123 113 112 101", fill = TRUE)
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
# 1 A 23 45 53 34 62 87 94 75 NA NA NA NA
# 2 B 120 61 113 41 109 48 90 95 123 113 112 101
# from df, remove first column
# then, make a four-column matrix of the non-NA values in each row
l <- apply(df[ , -1], 1, function(x) matrix(na.omit(x), ncol = 4, byrow = TRUE))
l
# [[1]]
# [,1] [,2] [,3] [,4]
# [1,] 23 45 53 34
# [2,] 62 87 94 75
#
# [[2]]
# [,1] [,2] [,3] [,4]
# [1,] 120 61 113 41
# [2,] 109 48 90 95
# [3,] 123 113 112 101
# add id column
lapply(seq_along(l), function(x){
cbind.data.frame(id = paste0(df$V1[x], seq(from = 1, to = nrow(l[[x]]))), l[[x]])
})
# [[1]]
# id 1 2 3 4
# 1 A1 23 45 53 34
# 2 A2 62 87 94 75
#
# [[2]]
# id 1 2 3 4
# 1 B1 120 61 113 41
# 2 B2 109 48 90 95
# 3 B3 123 113 112 101
#读取数据
df请粘贴问题中CSV文件的内容。CSV内容与PDF内容相同。如果粘贴的数据的起始块是实际的CSV文件,那么您确实应该考虑从R中进行数据准备,并使用像崇高文本这样的编辑器将其放入底部所需的格式。如果您的问题是如何获取类似于原始块的大型粘贴并以编程方式将其转换为类似于底部块的内容,那么这是一个完全不同的问题。另外,您使用了什么功能将CSV加载到R中?我使用了read.CSV(“filepath”,header=F)。请粘贴问题中的CSV文件内容。CSV内容与PDF内容相同。如果粘贴的数据的起始块是实际的CSV文件,那么您确实应该考虑从R中进行数据准备,并使用像崇高文本这样的编辑器将其放入底部所需的格式。如果您的问题是如何获取类似于原始块的大型粘贴并以编程方式将其转换为类似于底部块的内容,那么这是一个完全不同的问题。另外,您使用了什么功能将CSV加载到R中?我使用了read.CSV(“filepath”,header=F)。请粘贴问题中的CSV文件内容。CSV内容与PDF内容相同。如果粘贴的数据的起始块是实际的CSV文件,那么您确实应该考虑从R中进行数据准备,并使用像崇高文本这样的编辑器将其放入底部所需的格式。如果您的问题是如何获取类似于原始块的大型粘贴并以编程方式将其转换为类似于底部块的内容,那么这是一个完全不同的问题。另外,您使用了什么功能将CSV加载到R中?我使用了read.CSV(“filepath”,header=F)。请粘贴问题中的CSV文件内容。CSV内容与PDF内容相同。如果粘贴的数据的起始块是实际的CSV文件,那么您确实应该考虑从R中进行数据准备,并使用像崇高文本这样的编辑器将其放入底部所需的格式。如果您的问题是如何获取类似于原始块的大型粘贴并以编程方式将其转换为类似于底部块的内容,那么这是一个完全不同的问题。另外,您使用什么函数将CSV加载到R中?我使用read.CSV(“filepath”,header=F)。