如何合并在R中创建一列,该列根据更新日期只接受一个值

如何合并在R中创建一列,该列根据更新日期只接受一个值,r,R,我是新来的R,有一个矩阵如下: 收入 0 Name usd/day update_year usd/day update_year 1 John 52.0 2011 NA NA 2 Mary 44.0 2012 NA NA 3 Nicole 44.5 2000 est. 49.2 2010 est. 4 Cynthia 38.1 2001 est.

我是新来的R,有一个矩阵如下:

收入

0  Name     usd/day  update_year  usd/day update_year
1  John     52.0     2011         NA       NA
2  Mary     44.0     2012         NA       NA
3  Nicole   44.5     2000 est.    49.2     2010 est.
4  Cynthia   38.1    2001 est.    44.0     2011
我想清理R中的数据,只有3列-名称、美元/天和更新年,得到如下内容:

0  Name    usd/day  update_year
1  John    52.0     2011
2  Mary    44.0     2012
3  Nicole  49.2     2010
4  Cynthia 44.0     2011
请问我该如何在R区做这件事


我不想手动组合它们,实际数据超过100行。

这应该可以。您似乎希望提取美元的最新日期(即年份)和最高值。你需要做几件事

首先,仅将年份保存在
update_year
中;似乎你不想在最后一张桌子上出现“est”。我们可以使用
gsub
来实现这一点

df$update_year.x <- gsub("[^0-9]", "", df$update_year.x)
df$update_year.y <- gsub("[^0-9]", "", df$update_year.y)
数据

df <- read.table(text="
X0  Name     usd/day.x  update_year.x  usd/day.y update_year.y
1  John     52.0     2011         NA       NA
2  Mary     44.0     2012         NA       NA
3  Nicole   44.5     '2000 est.'    49.2     '2010 est.'
4  Cynthia   38.1    '2001 est.'    44.0     2011", header=TRUE,fill=TRUE,stringsAsFactors=FALSE)

df这应该行得通。您似乎希望提取美元的最新日期(即年份)和最高值。你需要做几件事

首先,仅将年份保存在
update_year
中;似乎你不想在最后一张桌子上出现“est”。我们可以使用
gsub
来实现这一点

df$update_year.x <- gsub("[^0-9]", "", df$update_year.x)
df$update_year.y <- gsub("[^0-9]", "", df$update_year.y)
数据

df <- read.table(text="
X0  Name     usd/day.x  update_year.x  usd/day.y update_year.y
1  John     52.0     2011         NA       NA
2  Mary     44.0     2012         NA       NA
3  Nicole   44.5     '2000 est.'    49.2     '2010 est.'
4  Cynthia   38.1    '2001 est.'    44.0     2011", header=TRUE,fill=TRUE,stringsAsFactors=FALSE)

df我们可以使用
pmax
将值替换为
gsub

update_year <- do.call(pmax, c(lapply(df[c(4,6)], function(x) 
                    as.numeric(gsub("\\D+", "", x))), list(na.rm=TRUE)))
`usd/day` <- do.call(pmax, c(df[c(3,5)], list(na.rm=TRUE)))   


cbind(df[1:2], `usd/day`, update_year)
#   0    Name   usd/day update_year
#1  1    John      52.0        2011
#2  2    Mary      44.0        2012
#3  3  Nicole      49.2        2010
#4  4 Cynthia      44.0        2011

update\u year在用
gsub

update_year <- do.call(pmax, c(lapply(df[c(4,6)], function(x) 
                    as.numeric(gsub("\\D+", "", x))), list(na.rm=TRUE)))
`usd/day` <- do.call(pmax, c(df[c(3,5)], list(na.rm=TRUE)))   


cbind(df[1:2], `usd/day`, update_year)
#   0    Name   usd/day update_year
#1  1    John      52.0        2011
#2  2    Mary      44.0        2012
#3  3  Nicole      49.2        2010
#4  4 Cynthia      44.0        2011

update\u一方面,您的数据框中有重复的列名,这将导致问题。另一方面,您的数据框中有重复的列名,这将导致问题。谢谢。但如果美元/天下跌,我该如何处理?我有一些记录在稍后更新时收入较低。如果不是NA,您是否希望在第二个usd/天列中显示值,否则在第一个usd/天列中显示值?然后您可以这样做:ifelse(is.na(df[,6]),df[,4],df[,6])。谢谢。但如果美元/天下跌,我该如何处理?我有一些记录在稍后更新时收入较低。如果不是NA,您是否希望在第二个usd/天列中显示值,否则在第一个usd/天列中显示值?然后您可以这样做:ifelse(is.na(df[,6]),df[,4],df[,6])。