【问题标题】:select all rows with same column name in dataframe选择数据框中具有相同列名的所有行
【发布时间】:2017-08-31 14:27:00
【问题描述】:

我有一个列名重复的数据框。

df<-data.frame(matrix(ncol = 8, nrow = 0))
df<-rbind(df,c(1:8))
colnames(df) <- c("c1","c2","c3","c4","c1","c2","c5","c6")

> df
  c1 c2 c3 c4 c1 c2 c5 c6
1  1  2  3  4  5  6  7  8

如可见,列 c1c2 重复两次。但我只能在调用数据框时访问第一个出现的列。

> df$c1
[1] 1
> df$c2
[1] 2
> df[,"c1"]
[1] 1
> df[,"c2"]
[1] 2

我如何访问所有值,即。 c1: 1, c1:5 打电话给某种df[,"c1"]

注意:数据框有重复列名的原因是嵌套列表转换为数据框

【问题讨论】:

  • 您不想更改列名有什么特别的原因吗?如果没有,那可能是最直接的解决方案。
  • 也许你需要使用列的索引位置。 df[1]df[5].
  • df[names(df) %in% 'c1']
  • @Z.Lin,其背后的原因是动态的,实际数据包含vision-api result,属性为categories.detail.celebrities.name。对于通过的每个不同图像,它会生成不同的 名人 名称(null 或 3-4 等)。我正在传递多张图像并为所有人收集结果。
  • 谢谢@Sotos,我一直在努力。解决方案有效:)

标签: r


【解决方案1】:

如果你只想要 c1 列试试这个

df[1,names(df) %in% ('c1')]

如果你想要所有具有重复名称的列的值,那么试试这个

df[1,names(df) %in% names(df)[duplicated(names(df))]]

【讨论】:

  • 我正要发布这个。 df[duplicated(names(df)) | duplicated(names(df), fromLast = TRUE)]
  • 这个解决方案正好解决了我的目的,谢谢大家
【解决方案2】:

你可以试试这个

df <- data.frame(matrix(ncol = 8, nrow = 0));
df <- rbind(df, c(1:8));
colnames(df) <- c("c1", "c2", "c3", "c4", "c1", "c2", "c5", "c6");
df[, names(df) == 'c1'];
sapply(unique(names(df)), function(x) unname(unlist(df[, names(df) == x])))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多