拆分字符串、标记子字符串并将标记转换为数字向量
Split a string, tokenize substrings, and convert tokens to numeric vectors
我有一个字符串:
String <- "268.1,271.1,280.9,294.7,285.6,288.6,384.4\n124.8,124.2,116.2,117.7,118.3,122.0,168.3\n18,18,18,18,18,18,18"
我想根据\n
.
把它分成三个子串
我使用以下代码做到了这一点:
strsplit(String, "\n")
它产生了三个子字符串。
如何获得三个独立的存在,以便我可以使用每个向量进行计算?
如何标记子字符串,以创建数值向量?
String<- "268.1,271.1,280.9,294.7,285.6,288.6,384.4\n124.8,124.2,116.2,117.7,118.3,122.0,168.3\n18,18,18,18,18,18,18"
string_vector <- unlist(strsplit(String, "\n"))
unlist(lapply(strsplit(string_vector, ','),as.numeric))
输出
[1] 268.1 271.1 280.9 294.7 285.6 288.6 384.4 124.8 124.2 116.2 117.7 118.3 122.0 168.3 18.0 18.0 18.0 18.0 18.0 18.0
[21] 18.0
这是一种基于 R 的方法。strsplit
有点棘手,因为它 returns 是一个列表,而 也 对列表不起作用。
正如您在问题中所建议的那样,使用 strsplit
和 split = "\n"
拆分为 3 个字符串的列表。
使用 unlist
将该列表更改为 3 个字符串的向量。
再次使用 strsplit
和 split = ","
创建一个包含 3 个字符向量的列表
使用lapply
将这些字符向量转换为数值向量。
lapply(strsplit(unlist(strsplit(String,"\n")),","),as.numeric)
[[1]]
[1] 268.1 271.1 280.9 294.7 285.6 288.6 384.4
[[2]]
[1] 124.8 124.2 116.2 117.7 118.3 122.0 168.3
[[3]]
[1] 18 18 18 18 18 18 18
我们可以使用scan
。在 \n
处拆分 'String' 后,遍历 list
和 scan
字符串以将其读取为 vector
lapply(strsplit(String, "\n")[[1]], function(x)
scan(text = x, what = numeric(), sep=","))
或使用 read.table
(如最初所示)
read.table(text = String, sep=",")
如果元素个数不等,使用fill = TRUE
read.table(text = String, sep=",", fill = TRUE)
原回答:
read.table(text = String, sep=",")
# V1 V2 V3 V4 V5 V6 V7
#1 268.1 271.1 280.9 294.7 285.6 288.6 384.4
#2 124.8 124.2 116.2 117.7 118.3 122.0 168.3
#3 18.0 18.0 18.0 18.0 18.0 18.0 18.0
我们可以使用 read.table
将 String
读取为数据框,分隔符为逗号 (,
),这将使列自动变为数字。
read.table(text = String, sep = ",")
# V1 V2 V3 V4 V5 V6 V7
#1 268.1 271.1 280.9 294.7 285.6 288.6 384.4
#2 124.8 124.2 116.2 117.7 118.3 122.0 168.3
#3 18.0 18.0 18.0 18.0 18.0 18.0 18.0
然后我们可以使用 asplit
拆分每一行的数据:
asplit(read.table(text = String, sep = ","), 1)
#[[1]]
# V1 V2 V3 V4 V5 V6 V7
#268.1 271.1 280.9 294.7 285.6 288.6 384.4
#[[2]]
# V1 V2 V3 V4 V5 V6 V7
#124.8 124.2 116.2 117.7 118.3 122.0 168.3
#[[3]]
#V1 V2 V3 V4 V5 V6 V7
#18 18 18 18 18 18 18
我有一个字符串:
String <- "268.1,271.1,280.9,294.7,285.6,288.6,384.4\n124.8,124.2,116.2,117.7,118.3,122.0,168.3\n18,18,18,18,18,18,18"
我想根据\n
.
我使用以下代码做到了这一点:
strsplit(String, "\n")
它产生了三个子字符串。
如何获得三个独立的存在,以便我可以使用每个向量进行计算?
如何标记子字符串,以创建数值向量?
String<- "268.1,271.1,280.9,294.7,285.6,288.6,384.4\n124.8,124.2,116.2,117.7,118.3,122.0,168.3\n18,18,18,18,18,18,18"
string_vector <- unlist(strsplit(String, "\n"))
unlist(lapply(strsplit(string_vector, ','),as.numeric))
输出
[1] 268.1 271.1 280.9 294.7 285.6 288.6 384.4 124.8 124.2 116.2 117.7 118.3 122.0 168.3 18.0 18.0 18.0 18.0 18.0 18.0
[21] 18.0
这是一种基于 R 的方法。strsplit
有点棘手,因为它 returns 是一个列表,而 也 对列表不起作用。
正如您在问题中所建议的那样,使用
strsplit
和split = "\n"
拆分为 3 个字符串的列表。使用
unlist
将该列表更改为 3 个字符串的向量。再次使用
strsplit
和split = ","
创建一个包含 3 个字符向量的列表使用
lapply
将这些字符向量转换为数值向量。
lapply(strsplit(unlist(strsplit(String,"\n")),","),as.numeric)
[[1]]
[1] 268.1 271.1 280.9 294.7 285.6 288.6 384.4
[[2]]
[1] 124.8 124.2 116.2 117.7 118.3 122.0 168.3
[[3]]
[1] 18 18 18 18 18 18 18
我们可以使用scan
。在 \n
处拆分 'String' 后,遍历 list
和 scan
字符串以将其读取为 vector
lapply(strsplit(String, "\n")[[1]], function(x)
scan(text = x, what = numeric(), sep=","))
或使用 read.table
(如最初所示)
read.table(text = String, sep=",")
如果元素个数不等,使用fill = TRUE
read.table(text = String, sep=",", fill = TRUE)
原回答:
read.table(text = String, sep=",")
# V1 V2 V3 V4 V5 V6 V7
#1 268.1 271.1 280.9 294.7 285.6 288.6 384.4
#2 124.8 124.2 116.2 117.7 118.3 122.0 168.3
#3 18.0 18.0 18.0 18.0 18.0 18.0 18.0
我们可以使用 read.table
将 String
读取为数据框,分隔符为逗号 (,
),这将使列自动变为数字。
read.table(text = String, sep = ",")
# V1 V2 V3 V4 V5 V6 V7
#1 268.1 271.1 280.9 294.7 285.6 288.6 384.4
#2 124.8 124.2 116.2 117.7 118.3 122.0 168.3
#3 18.0 18.0 18.0 18.0 18.0 18.0 18.0
然后我们可以使用 asplit
拆分每一行的数据:
asplit(read.table(text = String, sep = ","), 1)
#[[1]]
# V1 V2 V3 V4 V5 V6 V7
#268.1 271.1 280.9 294.7 285.6 288.6 384.4
#[[2]]
# V1 V2 V3 V4 V5 V6 V7
#124.8 124.2 116.2 117.7 118.3 122.0 168.3
#[[3]]
#V1 V2 V3 V4 V5 V6 V7
#18 18 18 18 18 18 18