我有一列(是的,只有一列)有 200 行,其元素是用逗號分隔的字串。
資料框中的實際資料:
"A, B, C, D"
"1, 10, 13, 4"
"0, 1, 6, 1"
"9, 3, 3, 0"
...
從這一列中,我想生成以下資料框:
A B C D
1 10 13 4
0 1 6 1
9 3 3 0
...
其中“A”、“B”、“C”、“D”是該資料框的列標題,行也分別用逗號分割為每個創建的列。如何在 R 中使用 read.table 將第一行作為標題來實作這一點?
uj5u.com熱心網友回復:
這里有幾種不同的方法來提取和使用帶有read.table().
我從兩組假資料開始。在列名中沒有任何價值的一個(真正的列名在第一行)。
df1 <- data.frame("V1" = c("A,B,C,D",
"AA,D,E,F3",
"Car1,Car2,Car3,Car4",
"a,b,c,d",
"a1,b1,c1,d1"))
# V1
# 1 A,B,C,D
# 2 AA,D,E,F3
# 3 Car1,Car2,Car3,Car4
# 4 a,b,c,d
# 5 a1,b1,c1,d1
在另一種情況下,列為列名的字串是可能的名稱串列。
df2 <- data.frame("A,B,C,D" = c("AA,D,E,F3",
"Car1,Car2,Car3,Car4",
"a,b,c,d",
"a1,b1,c1,d1"),
check.names = F)
# A,B,C,D
# 1 AA,D,E,F3
# 2 Car1,Car2,Car3,Car4
# 3 a,b,c,d
# 4 a1,b1,c1,d1
提取由逗號分隔的名稱和值,其中可能的標題位于第 1 行(使用df1)。
# single data.frame with headers concatenated in the first row
df.noHeader <- read.table(col.names = unlist(strsplit(df1[1,],
split = "[,]")),
sep = ",",
skip = 1, # since the headers were in row 1
text = unlist(df1, use.names = F))
# A B C D
# 1 AA D E F3
# 2 Car1 Car2 Car3 Car4
# 3 a b c d
# 4 a1 b1 c1 d1
為清楚起見,當名稱在原始資料框的列名中時,這是有效的。
# splitting the original header when splitting the data
df.header <- read.table(col.names = unlist(strsplit(names(df2),
split = "[,]")),
sep = ",",
text = unlist(df2))
# A B C D
# 1 AA D E F3
# 2 Car1 Car2 Car3 Car4
# 3 a b c d
# 4 a1 b1 c1 d1
如果您在其他行中有標題,則只需將呼叫中的值更改為strsplit(),如下所示:
# if the headers were in row 2
df.noHeader <- read.table(col.names = unlist(strsplit(df1[2,], # <- see 2 here
split = "[,]")),
sep = ",",
skip = 2, # since the headers were in row 2
text = unlist(df1, use.names = F))
# AA D E F3
# 1 Car1 Car2 Car3 Car4
# 2 a b c d
# 3 a1 b1 c1 d1
# if the headers were in row 3
df.noHeader <- read.table(col.names = unlist(strsplit(df1[3,], # <- see 3 here
split = "[,]")),
sep = ",",
skip = 3, # since the headers were in row 3
text = unlist(df1, use.names = F))
# Car1 Car2 Car3 Car4
# 1 a b c d
# 2 a1 b1 c1 d1
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/396865.html
上一篇:有沒有辦法在字串中使用布林值?我想在字串中搜索一個單詞,如果它在那里,則輸出含義
下一篇:用逗號將字串拆分為R中的多列
