You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于另一DataFrame的日期与艺术家条件筛选DataFrame

解决方案

我来帮你搞定这个需求!首先我们需要处理日期格式(字符串没法直接比较先后),再按照你的条件筛选出符合要求的行。以下是完整的步骤和代码:

1. 构造示例数据

先把你给出的两个DataFrame用R代码还原出来,方便复现:

# 创建C1 DataFrame
C1 <- data.frame(
  Date = c("01-11-1955", "18-01-1956", "19-04-1956", "01-05-1956", "21-11-1956"),
  Artist = c("M", "M", "M", "M", "X"),
  stringsAsFactors = FALSE
)

# 创建T1 DataFrame
T1 <- data.frame(
  Date = c("06-11-1955", "15-01-1956", "15-04-1956", "06-05-1956", "25-11-1956", "25-11-1956"),
  Artist = c("UNK", "M", "UNK", "UNK", "X", "M"),
  FeatArtist = c("M", "UNK", "M", "M", "UNK", "UNK"),
  stringsAsFactors = FALSE
)

2. 转换日期格式

把字符串类型的日期转换成R的Date类型,这样才能比较先后:

C1$Date <- as.Date(C1$Date, format = "%d-%m-%Y")
T1$Date <- as.Date(T1$Date, format = "%d-%m-%Y")

3. 添加年月匹配列

从你的期望结果来看,“对应C1的Date”应该是指同一Artist且同年同月的日期,所以我们给两个DataFrame添加年月列,用来精准匹配:

C1$YearMonth <- format(C1$Date, "%Y-%m")
T1$YearMonth <- format(T1$Date, "%Y-%m")

4. 匹配并筛选符合条件的行

我们分两种情况匹配:T1的Artist等于C1的Artist,或者T1的FeatArtist等于C1的Artist,同时保证同年月,且T1的日期晚于C1的日期:

# 匹配T1的Artist与C1的Artist(同年月)
match_artist <- merge(T1, C1, by = c("Artist", "YearMonth"), suffixes = c("_T1", "_C1"))
# 匹配T1的FeatArtist与C1的Artist(同年月)
match_feat <- merge(T1, C1, by.x = c("FeatArtist", "YearMonth"), by.y = c("Artist", "YearMonth"), suffixes = c("_T1", "_C1"))

# 合并两种匹配结果,筛选T1日期晚于C1日期的行
filtered_rows <- rbind(match_artist, match_feat)
filtered_rows <- filtered_rows[filtered_rows$Date_T1 > filtered_rows$Date_C1, ]

# 去重并整理成最终结果格式
final_result <- unique(filtered_rows[, c("Date_T1", "Artist", "FeatArtist")])
colnames(final_result) <- c("Date", "Artist", "FeatArtist")

# 把日期转回你需要的字符串格式(可选)
final_result$Date <- format(final_result$Date, "%d-%m-%Y")

5. 查看最终结果

运行上述代码后,final_result就是你想要的结果:

print(final_result)
#        Date Artist FeatArtist
# 1 06-11-1955    UNK          M
# 4 06-05-1956    UNK          M
# 5 25-11-1956      X        UNK

内容的提问来源于stack exchange,提问作者user9740061

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:09:42