【问题标题】:For-If loop manipulation in RR中的For-If循环操作
【发布时间】:2019-06-08 10:05:59
【问题描述】:

我正在尝试在 R 上复制一个非常简单的 VBA 代码,以识别重复项。我的目标是确定样本集中有多少组重复项,首先是跨行向下读取,然后跨列读取。 所以我想出了这个样本:

x<-matrix(data=c("Ali","Ali","Abu","Ali","Ahmad","siti","Ali","Abu", "Ahmad", "Ali", "Abu", "Aisyah", "Khalid", "Robin","Ahmad","Ali","JOrdan","siti"), nrow=6)
x<-data.frame(x)

colnames(x)<-c("nama1","nama2","nama3")

所以你会得到这样的东西

 nama1  nama2  nama3
1   Ali    Ali Khalid
2   Ali    Abu  Robin
3   Abu  Ahmad  Ahmad
4   Ali    Ali    Ali
5 Ahmad    Abu JOrdan
6  siti Aisyah   siti

所以我想做的基本上是:

c<-0
for (i in x){
    if (x[i,1]==x[i+1,1]){
        c=c+1
        }
    print c
    }

我想要的最终输出是指定每行中有多少重复项,然后跨列执行...就像

 for i=1 to 10
 for j=1 to 20
        cells(i,j)="XXX"
        do this
 next j
 next i

问题是我不知道如何在 R 中指定单个单元格,例如。在 VBA 中你可以做 cells(i+1,1)=cells(i,1).. 我正在学习在 R 中做非常简单的数据操作。

我想在最后总结所有列的 c 值。所以应该是 4+4+6= 14。

欢迎任何建议!谢谢

【问题讨论】:

  • 您能展示一下您的预期输出是什么样的吗?
  • 同意 Ronak,您应该明确显示您的预期输出。也许像apply(x, 1, function(i) sum(duplicated(i)))(用于行)和apply(x, 2, function(i) sum(duplicated(i)))(用于列)之类的东西可能就是您所追求的
  • 大家好,抱歉我更新问题的延迟

标签: r for-loop if-statement


【解决方案1】:
#row total number of duplicates
apply(x, 1, function(x) length( x[ duplicated(x) ] ) )
#[1] 1 0 1 2 0 1

#column total number of duplicates
apply(x, 2, function(x) length( x[ duplicated(x) ] ) )
#nama1 nama2 nama3 
#    2     2     0 

【讨论】:

  • 这不是代码高尔夫,但apply(x, 1, function(i) sum(duplicated(i))) 略短(见我上面的评论;-)
  • @MauritsEvers true :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 2022-01-10
  • 2019-05-05
  • 2021-07-30
相关资源
最近更新 更多