R语言数据处理求助:如何移除特定重复值并保留对角线数据?
拆分指定字段到不同行的R语言解决方案
方法一:使用tidyr包的pivot_longer(推荐)
这是处理列转行需求的标准方法,无需手动复制行,代码简洁且易维护:
library(tidyr) # 你的原始数据 mydata = data.frame( name = "Vince", date = "16/05/1977", money = 20, city = "NY", income = 100, country = "USA", car = "Porsche", loan = 250 ) # 将money/income/loan拆分为多行,保留其他字段不变 target_data = pivot_longer( data = mydata, cols = c(money, income, loan), # 指定需要拆分的列 names_to = "type", # 存储原列名的新列 values_to = "amount" # 存储对应值的新列 ) print(target_data)
执行后会得到目标格式:
# A tibble: 3 × 7 name date city country car type amount <chr> <chr> <chr> <chr> <chr> <chr> <dbl> 1 Vince 16/05/1977 NY USA Porsche money 20 2 Vince 16/05/1977 NY USA Porsche income 100 3 Vince 16/05/1977 NY USA Porsche loan 250
方法二:基于你现有复制行的思路继续处理
如果你想沿用自己复制行的逻辑,只需给每行标记对应字段,然后将非目标字段设为NA:
# 你的原始复制行代码 mydata = data.frame( name = "Vince", date = "16/05/1977", money = 20, city = "NY", income = 100, country = "USA", car = "Porsche", loan = 250 ) duplicated_data = do.call("rbind", replicate(3, mydata, simplify = FALSE)) # 给每行标记对应的字段类型 duplicated_data$type = c("money", "income", "loan") # 移除每行的多余值:仅保留对应type的字段值,其余设为NA duplicated_data$money[duplicated_data$type != "money"] = NA duplicated_data$income[duplicated_data$type != "income"] = NA duplicated_data$loan[duplicated_data$type != "loan"] = NA # 可选:合并为单一金额列(如果需要) duplicated_data$amount = rowSums(duplicated_data[, c("money", "income", "loan")], na.rm = TRUE) # 可选:删除原money/income/loan列 duplicated_data = duplicated_data[, !names(duplicated_data) %in% c("money", "income", "loan")] print(duplicated_data)
执行后结果:
name date city country car type amount 1 Vince 16/05/1977 NY USA Porsche money 20 2 Vince 16/05/1977 NY USA Porsche income 100 3 Vince 16/05/1977 NY USA Porsche loan 250
内容的提问来源于stack exchange,提问作者PrettyClose
相关产品推荐
相关产品推荐

