-1

我有这种格式的 ID 数据和它出现的次数。我想编写一个返回 ID 出现两次以上的函数。

  ID    Freq
  100    1
  101    1
  102    1
  103    1
  104    1
  105    2
  106    1
  107    1
  108    1

这是我的代码

if (data$Freq>=2){
  return(data$ID)
} else {
  print("no duplicates of years")
}

收到以下分析器和警告

[1] "no duplicates of years"
Warning message:
In if (x$Freq > 1) { :
  the condition has length > 1 and only the first element will be used

我做错了什么?

编辑:

谢谢大家的回复。我想我创建频率表的方式有问题

x=as.data.frame(table(data$cid)) 

cid在哪里ID。当我尝试查看第一列中的元素时,即

> x$var1[1:20,]

我得到NULL,而这

>x$Freq[1:20,]

会回来

Error in x$Freq[1:20, ] : incorrect number of dimensions' 

x[1:20,]返回一个数据框,显示x.

4

2 回答 2

3

有一个命令duplicated()可以在不参考您的 $Freq 列的情况下执行此操作:

data$ID[duplicated(data$ID)]

你自己的代码不能像错误提示的那样工作,因为if()需要一个 TRUE/FALSE 条件,它只会查看 data$Freq 的第一个元素,它是 1 然后停止。

如果你想做这样的事情 then which()or a 就是你想要的:

df= data.frame(freq=rep(1:2,5), id=1:10)

 df

   freq id
1     1  1
2     2  2
3     1  3
4     2  4
5     1  5
6     2  6
7     1  7
8     2  8
9     1  9
10    2 10

df$id[which(df$freq>1)]
[1]  2  4  6  8 10

甚至

df$id[df$freq>1]
[1]  2  4  6  8 10
于 2012-11-28T08:12:53.617 回答
1

正如@Andrie 建议的那样,ifelse可能有用:

根据您的其他信息,这是一个可重现的示例:

set.seed(1)

data <- as.data.frame(table(data.frame(cid = sample(100:120, 30, replace=TRUE))))

> ifelse(data$Freq-1, as.character(data$Var1), "no duplicates of years")
#  [1] "no duplicates of years" "no duplicates of years" "no duplicates of years"
#  [4] "no duplicates of years" "104"                    "105"                   
#  [7] "107"                    "108"                    "no duplicates of years"
# [10] "no duplicates of years" "113"                    "no duplicates of years"
# [13] "no duplicates of years" "116"                    "118"                   
# [16] "119"                    "no duplicates of years"

并且只显示频率 > 1 的 ID:

data$Var1[as.logical(data$Freq - 1)]
# [1] 104 105 107 108 113 116 118 119
# 17 Levels: 100 101 102 103 104 105 107 108 110 112 113 114 115 116 118 ... 120
于 2012-11-28T08:12:31.107 回答