我在理解如何从数据框中打印值而不是索引时遇到问题。
这是我的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
另外,我知道这段代码可以缩小为一行,但我真的想了解这里发生了什么。
答案 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))