替换 data.frame 中的字符
Replace characters in data.frame
我有一个data.frame
Client1 Client2 Client3
3 1 9
6 2 19
23 7 20
45 102 101
55 NA 102
61 NA NA
和另一个 data.frame 其中有
number date
1 02.11.2018
2 03.11.2018
3 04.11.2018
4 05.11.2018
... ....
102 12.01.2019
想法是将第一个 data.frame 中的数字替换为第二个中的日期
并获得:
Client1 Client2 Client3
04.11.2018 04.11.2018 04.11.2018
04.11.2018 04.11.2018 04.11.2018
04.11.2018 04.11.2018 04.11.2018
04.11.2018 04.11.2018 04.11.2018
04.11.2018 NA 04.11.2018
04.11.2018 NA NA
日期不正确,这是一个例子。
非常感谢您的帮助:)
假设你的两个数据帧被称为 Clients
和 Dates
:
library(tidyverse)
Clients %>%
gather(everything(), key = Client, value = number) %>%
left_join(Dates, by = c("number" = "number")) %>%
select(Client, date) %>%
spread(key = Client, value = date)
我们可以使用匹配:
# example data
df1 <- read.table(text = "Client1 Client2 Client3
3 1 9
6 2 19
23 7 20
45 102 101
55 NA 102
61 NA NA", header = TRUE)
df2 <- read.table(text = "number date
1 02.11.2018
2 03.11.2018
3 04.11.2018
4 05.11.2018
102 12.01.2019", header = TRUE, stringsAsFactors = FALSE)
# loop through columns, use match
data.frame(lapply(df1, function(i)
df2$date[ match(i, df2$number) ]
))
# Client1 Client2 Client3
# 1 04.11.2018 02.11.2018 <NA>
# 2 <NA> 03.11.2018 <NA>
# 3 <NA> <NA> <NA>
# 4 <NA> 12.01.2019 <NA>
# 5 <NA> <NA> 12.01.2019
# 6 <NA> <NA> <NA>
使用@zx8754的示例数据,你也可以试试:
library(qdap)
as.data.frame(apply(df1, 2, lookup, df2))
# output
# Client1 Client2 Client3
# 1 04.11.2018 02.11.2018 <NA>
# 2 <NA> 03.11.2018 <NA>
# 3 <NA> <NA> <NA>
# 4 <NA> 12.01.2019 <NA>
# 5 <NA> <NA> 12.01.2019
# 6 <NA> <NA> <NA>
我有一个data.frame
Client1 Client2 Client3
3 1 9
6 2 19
23 7 20
45 102 101
55 NA 102
61 NA NA
和另一个 data.frame 其中有
number date
1 02.11.2018
2 03.11.2018
3 04.11.2018
4 05.11.2018
... ....
102 12.01.2019
想法是将第一个 data.frame 中的数字替换为第二个中的日期 并获得:
Client1 Client2 Client3
04.11.2018 04.11.2018 04.11.2018
04.11.2018 04.11.2018 04.11.2018
04.11.2018 04.11.2018 04.11.2018
04.11.2018 04.11.2018 04.11.2018
04.11.2018 NA 04.11.2018
04.11.2018 NA NA
日期不正确,这是一个例子。 非常感谢您的帮助:)
假设你的两个数据帧被称为 Clients
和 Dates
:
library(tidyverse)
Clients %>%
gather(everything(), key = Client, value = number) %>%
left_join(Dates, by = c("number" = "number")) %>%
select(Client, date) %>%
spread(key = Client, value = date)
我们可以使用匹配:
# example data
df1 <- read.table(text = "Client1 Client2 Client3
3 1 9
6 2 19
23 7 20
45 102 101
55 NA 102
61 NA NA", header = TRUE)
df2 <- read.table(text = "number date
1 02.11.2018
2 03.11.2018
3 04.11.2018
4 05.11.2018
102 12.01.2019", header = TRUE, stringsAsFactors = FALSE)
# loop through columns, use match
data.frame(lapply(df1, function(i)
df2$date[ match(i, df2$number) ]
))
# Client1 Client2 Client3
# 1 04.11.2018 02.11.2018 <NA>
# 2 <NA> 03.11.2018 <NA>
# 3 <NA> <NA> <NA>
# 4 <NA> 12.01.2019 <NA>
# 5 <NA> <NA> 12.01.2019
# 6 <NA> <NA> <NA>
使用@zx8754的示例数据,你也可以试试:
library(qdap)
as.data.frame(apply(df1, 2, lookup, df2))
# output
# Client1 Client2 Client3
# 1 04.11.2018 02.11.2018 <NA>
# 2 <NA> 03.11.2018 <NA>
# 3 <NA> <NA> <NA>
# 4 <NA> 12.01.2019 <NA>
# 5 <NA> <NA> 12.01.2019
# 6 <NA> <NA> <NA>