0

我有一张格式如下的表格:

F   NF  C   NF  C   F   C   F   NF
F   NF  C   C   F   NF  NF  C   F
NF  C   F   F   NF  C   C   F   NF
NF  C   F   C   F   NF  F   NF  C
C   F   NF  F   NF  C   NF  C   F
C   F   NF  NF  C   F   F   NF  C
F   C   NF  NF  F   C   C   NF  F
F   C   NF  C   NF  F   NF  F   C
NF  F   C   F   C   NF  C   NF  F
NF  F   C   C   NF  F   F   C   NF
C   NF  F   F   C   NF  NF  F   C
C   NF  F   NF  F   C   F   C   NF

我想使用这张表来为某些项目设置值,然后做一堆事情(我认为不值得讨论的细节)。我想将变量“a”、“b”和“c”设置为等于 NF 在 3 个不同字符串(F、NF 和 C)中的位置。例如,我想使用for循环读取第一行并将a设置为2,b设置为1(因为NF在第二组三列的“第一”列中)然后c设置为3做一堆东西(因为NF在第三组三列的“第三”列中)。之后我希望它读取第二行并将a设置为2,b设置为3,c设置为1。

除了使用大量的 if 语句之外,我想不出办法来做到这一点。有替代方案吗?

谢谢

4

1 回答 1

1

您可以apply对表的每一行使用一个简单的函数,或者在这种情况下,选择表的特定列和对apply这些列中的每一行的函数:

> text = "F   NF  C   NF  C   F   C   F   NF
+ F   NF  C   C   F   NF  NF  C   F
+ NF  C   F   F   NF  C   C   F   NF
+ NF  C   F   C   F   NF  F   NF  C
+ C   F   NF  F   NF  C   NF  C   F
+ C   F   NF  NF  C   F   F   NF  C
+ F   C   NF  NF  F   C   C   NF  F
+ F   C   NF  C   NF  F   NF  F   C
+ NF  F   C   F   C   NF  C   NF  F
+ NF  F   C   C   NF  F   F   C   NF
+ C   NF  F   F   C   NF  NF  F   C
+ C   NF  F   NF  F   C   F   C   NF"
> x = read.table(text=text)
> a = apply(x[1:3], 1, function(vec) which(vec == "NF"))
> a
 [1] 2 2 1 1 3 3 3 3 1 1 2 2
> b = apply(x[4:6], 1, function(vec) which(vec == "NF"))
> b
 [1] 1 3 2 3 2 1 1 2 3 2 3 1
> c = apply(x[7:9], 1, function(vec) which(vec == "NF"))
> c
 [1] 3 1 3 2 1 2 2 1 2 3 1 3

的第二个参数apply告诉它您要将函数应用于表的哪个维度,1 是行,2 是列。

于 2013-07-09T04:14:39.033 回答