![](/img/trans.png)
[英]How do I merge the headers from one csv file with another csv file in R?
[英]How can I merge a single column from one file to another file
A
phy 44
chem 46
maths 44
biol 42
his 38
comm 40
B
Name RaK
Phy 45
chem 43
maths 41
His 38
Comm 48
geo 49
預期產量
RaK
phy 44 45
chem 46 43
maths 44 41
biol 42 0
his 38 38
comm 40 48
我需要像join(-a1 a,b)
。 有可能用R做到嗎? 第一個文件沒有列標題。
讀入數據:
A <- read.table(text="phy 44
chem 46
maths 44
biol 42
his 38
comm 40", as.is=TRUE)
B <- read.table(header=TRUE, text="Name RaK
phy 45
chem 43
maths 41
his 38
comm 48
geo 49", as.is=TRUE)
as.is = TRUE參數將Name列保留為字符,而不是轉換為factor。 合並兩個不同的data.frames時,這是首選方法。 現在,將列名稱添加到A。
names(A) <- c("Name", "col1")
執行合並,將所有行都保留在A中,而不管B是否有這樣的行。 因為兩個data.frame都有一個共同的名稱,所以不必添加by語句,盡管這可能是更好的做法。
dat <- merge(A, B, all.x=TRUE)
這返回
dat
Name col1 RaK
1 biol 42 NA
2 chem 46 43
3 comm 40 48
4 his 38 38
5 maths 44 41
6 phy 44 45
請注意,Rak的第一個值丟失(NA)。 要將其替換為0,您可以使用
dat$RaK[is.na(dat$RaK)] <- 0
完成了。
dat
Name col1 RaK
1 biol 42 0
2 chem 46 43
3 comm 40 48
4 his 38 38
5 maths 44 41
6 phy 44 45
OP已請求將文件A
所有行與文件B
合並或合並,以便預期結果包含biol
(來自A
)而不是geo
(來自B
)。
此外, B
的“ Name
列部分用大寫字母表示,而A
的對應列用小寫字母表示。
假定A
的數據存儲在一個名為"A.csv"
的csv文件中,其中"A.csv"
的第一A.csv
空(空白)。 對於B
同樣,但是這里的第一行包含列標題。
使用data.table
可以使用“ data.table
”完成:
library(data.table)
# read B, convert Name column to lower case
fread("B.csv")[, Name := tolower(Name)][
# read A and right join = all rows of A, only matching rows of B
fread("A.csv"), on = c("Name" = "V1")][
# replace NA by 0
is.na(RaK), RaK := 0L][]
Name RaK V2 1: phy 45 44 2: chem 43 46 3: maths 41 44 4: biol 0 42 5: his 38 38 6: comm 48 40
fread()
是data.table
自己的read.table()
更快版本。
為了重現性,在調用fread()
之后是A
和B
:
A <- structure(list(V1 = c("phy", "chem", "maths", "biol", "his",
"comm"), V2 = c(44L, 46L, 44L, 42L, 38L, 40L)), .Names = c("V1",
"V2"), row.names = c(NA, -6L), class = "data.frame")
B <- structure(list(Name = c("phy", "chem", "maths", "his", "comm",
"geo"), RaK = c(45L, 43L, 41L, 38L, 48L, 49L)), .Names = c("Name",
"RaK"), row.names = c(NA, -6L), class = "data.frame")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.