2016-03-02 65 views
-4

我需要一些R代码的帮助。需要帮助编写一个循环在R

我有一个数据帧,让我们说,它看起来是这样的:


___ | C1 C2 ... ... ... C3 C4 C5 ...

r1_ | 1 ...... 2 ...... 3 ..... 4 ..... 5

r2_ | 1 ...... 3 ...... 5 ..... 4 ..... 5

r3_ | 4 ...... 2 ...... 1 ..... 1 ..... 2

r4_ | 1 ...... 2 ...... 3 ..... 4 ..... 5

r5_ | 3 ...... 3 ...... 4 ..... 2 ..... 1


我需要做'相似性检查'。它是如何完成的,我需要运行一个循环遍历每一行的每一个元素,并将它与其他每一行的其他对应元素进行比较。因此,这意味着,我想使循环来检查这样每个响应,并给我一个布尔值T(真)或F(假):

[R1,C1] == [R1,C1]

[R1,C1] == [R2,C1]

[R1,C1] == [R3,C1]

[R1,C1] == [R4,C1]

[r1,c1] == [r5,c1]

此时循环完成检查[r1,c1] agai不包括C1的所有元素(包括它自己,这是不必要的)。比较[r1,c1]之后,我希望循环转到[r1,c2]并将其与c2的所有元素进行比较。像这样,我希望将r1的所有元素与所有对应的行元素进行比较。 控制台放出来是这样的:

牛逼.....牛逼.....牛逼.....牛逼.....牛逼

牛逼.....˚F ..... F ..... T ..... T

F ..... T ..... F ..... F ..... F

T ..... T ..... T ..... T ..... T

F ..... F ..... F ..... F。 .... F

现在这只是[r1,]与[r1,],[r2,],[ r3,],[r4,]和[r5,]。比较[r1,]之后的循环应该转到[r2,],并以与[r3,],[r4,]和[r5,]相同的方式进行比较,然后将[r4,]和[r5 , ] 等等等等。

最后,我会得到一个Trues和Falses的矩阵,它将显示每个调查与其他调查的相似性。然后,我会考虑(每一行'T'的数量除以列数)* 100。这将告诉我与另一个调查的相似程度。

TIA :)

此外, 有没有插入表格来解释这个问题没有更好更简单的方法?这是我的第一个问题,希望我不会浪费时间打字。“

+0

在列应用功能有更好的在问题共享数据。请参阅[如何创建可重现的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – MrFlick

回答

0

的使用该列的第一个元素进行比较,以列的其余部分被它做一个函数...

df <- read.csv(textConnection(gsub("\\.+", ",", 
    "1...... 2...... 3..... 4..... 5 
    1...... 3...... 5..... 4..... 5 
    4...... 2...... 1..... 1..... 2 
    1...... 2...... 3..... 4..... 5 
    3...... 3...... 4..... 2..... 1")), header=FALSE) 

apply(df, 2, function(x)x[1]==x) 
     V1 V2 V3 V4 V5 
[1,] TRUE TRUE TRUE TRUE TRUE 
[2,] TRUE FALSE FALSE TRUE TRUE 
[3,] FALSE TRUE FALSE FALSE FALSE 
[4,] TRUE TRUE TRUE TRUE TRUE 
[5,] FALSE FALSE FALSE FALSE FALSE