【发布时间】:2015-02-09 13:47:34
【问题描述】:
我目前有一个 ID 向量作为因素。我有一个 for 循环,用于检查数据框中的这些 ID 并返回一个特定值。我正在创建一个数据框,它在第 1 列中存储当前通过循环运行的 ID,在第二列中存储感兴趣的值。
我遇到的问题是在将 ith ID 分配给我的数据框时,它返回的是因子的索引号而不是值。见代码。
ref <- unique(yearsd[,11]) # yearsd df has customer records; i'm extracting unique IDs
counter <- data.frame(matrix(ncol = 2, nrow = length(ref))) # initialize counter for for loop
for(i in 1:length(ref))
{
loc <- which(ref[i] == yearsd[,11]) # returns positions of IDs
yearTF <- unique(yearsd[loc,3]) # gives me a vector of years that ID shows up
counter[i,1] = print(ref[i]) # store the ID currently in the loop
counter[i,2] = length(yearTF) # store the number of years the show up in the records
}
如果ref的ith元素是ABCD并且是因子的第32级,我的counter[i,1]值结束最多是 32 而不是 ABCD。我也试过print(ref[i]),但也没有运气。我总是得到因子的级别索引号。
如果我把它改成字符会更好吗?它们是字母数字字符串。
编辑
- yearsd 是带有客户记录的 df
- yearsd[,11] 包含客户 ID
- 对于每条记录,都有一个交易日期,它只存储 年,例如2005 年、2006 年等。
我正在尝试通过 yearsd 来获得一个 df,其中在一列中包含这些客户 ID,并在第二列中计算他们有多少年的交易/
Example Output:
CustID YearsIn
A0001 3
D504 1
RR45Y 2
意思是客户 A0001 有 3 个不同年份的交易,D504 有 1 个不同年份的交易,而 RR45Y 有 2 个不同年份的交易。每个客户一年内可能有多次交易。我只关心他们是否至少有 1 个;如果是这样,我会为那个客户计算那一年。
如果您有任何问题,请告诉我。感谢您的帮助。
【问题讨论】:
-
我认为你的计数器是一个数字矩阵。这就是为什么它无法在其中保存角色的原因。尝试保存在列表中,然后转换为数据框。
-
完整的reproducible example 在这里会有所帮助。目前还不清楚所涉及的所有对象的确切数据类型。我不确定您从作业中“返回值”的位置。
-
所以你只是想计算每年出现的次数?您可能应该为此使用
table(yearsd[,11])。但是由于yearsd仍然没有在这里定义,所以我不清楚它的确切结构,所以它仍然无法重现。但我认为你应该在这里使用table()或aggregate()或其他一些更像R 的函数。提供样本输入和所需的输出。 -
@koundy 我按照stackoverflow.com/questions/12613909/… 中的建议对计数器进行了单元测试,其中 counter[,1] 是字符。它仍然存储第 i 级索引值。
-
@MrFlick 我试图计算一个 ID 出现了多少年。一个 ID 可能在 2011 年出现 3 次,在 2012 年出现 4 次。因此,计数将是 2。将添加另一个编辑以明确。
标签: r