R Data Frame返回值表单列,而不是索引

时间:2016-05-06 17:05:00

标签: r dataframe set

我在理解如何从数据框中打印值而不是索引时遇到问题。

这是我的R代码:

symmetric_difference <- function(x, ...) {
  single_vect <- c(x, ...)

  df <- as.data.frame(table(single_vect))

  lengthOfDf <- length(df$Freq)

  result <- c()

  for (i in 1:lengthOfDf) {
    if(df$Freq[i] %% 2 == 1){
      result <- c(result, df$single_vect[i])
    }
  }
  return(result)
}

我尝试做的是计算给定值的所有出现次数,然后如果计数为奇数,则将该值附加到结果向量。但相反,实际保存的是来自此值的数据框的索引。

当我打印整个df变量或使用names(df)时,我看到的唯一列名是&#34; single_vect&#34;和&#34; Freq&#34;。

我尝试使用print()对此进行调试,但在if子句中打印df$single_vect[i]的值时,我得到的是实际值,而不是索引。

我做错了什么?

测试示例:

a <- c(1, 2, 3, 4)
b <- c(2, 4, 6, 8)
c <- c(3, 6, 9, 12)
symmetric_difference(a, b, c)

应该返回 1,8,9,12 ,而是返回 1,6,7,8

另外,我知道这段代码可以缩小为一行,但我真的想了解这里发生了什么。

2 个答案:

答案 0 :(得分:1)

问题是您的表的single_vect列被强制转换为factor。解决这个问题的一种方法是:

symmetric_difference <- function(x, ...) {
  single_vect <- c(x, ...)

  df <- as.data.frame(table(single_vect))
  df$single_vect <- as.numeric(levels(df$single_vect))

  lengthOfDf <- length(df$Freq)

  result <- c()

  for (i in 1:lengthOfDf) {
    if(df$Freq[i] %% 2 == 1){
      result <- c(result, df$single_vect[i])
    }
  }
  return(result)
}

答案 1 :(得分:1)

你的single_vect是矢量。把它改成数字。 使用

df$single_vect<-as.numeric(as.character(df$single_vect))