2

我有一个data.frame包含 713 行的列,其中一列itemcode有 228 个唯一代码。我的问题是,如何为所有 ID 创建选择选项?

nrow(test.1)
[1] 713

length(unique(test.1$itemcode))
[1] 228

head(test.1)
       itemcode ID
2    1180158001  1
225  1180149701  2
264  1180074301  3
522  1180177701  4
732  1180197201  5
1182 1170015601  6

这是我的试用代码:

test$ID <- 1:nrow(test)
for (i in unique(test$itemcode)) 
    for (j in 1:length(unique(test$itemcode))) 
        test$choice[test$itemcode == i] <- j

我想要的输出是这样的

      itemcode  ID choice  
2    1180158001  1 1   
225  1180149701  2 2  
264  1180074301  3 3   
522  1180177701  4 4   
732  1180197201  5 5   
1182 1170015601  6 6   
523  1180177701  7 4  

这行得通。但是如果 test.1 是测试的一个子集呢?此代码将从测试返回底层值。

test$choice <- as.integer( as.factor( test$itemcode ) )
4

1 回答 1

2

你想要factor...

test$choice <- as.integer( as.factor( test$itemcode ) )

这会将每个唯一itemcode值转换为整数编码变量。as.integer它将向您展示潜在的价值是什么。如果您希望它们按照它们出现的顺序排列,data.frame您需要指定变量的,您可以使用而不是来执行levels此操作。factorfactoras.factor

#  Turn them into an integer code - ordering is sorted on value of itemcode
test$choice <- as.integer( as.factor( test$itemcode ) )

# Same, but specify ordering as the values appear in the dataframe
test$choice2 <- as.integer( factor( test$itemcode , levels = test$itemcode[ ! duplicated( test$itemcode ) ] ) )

       itemcode ID choice choice2
2    1180158001  1      4       1
225  1180149701  2      3       2
264  1180074301  3      2       3
522  1180177701  4      5       4
732  1180197201  5      6       5
1182 1170015601  6      1       6
523  1180177701  7      5       4
于 2013-08-16T07:20:47.350 回答