我创建了一个数据框:
totalDeposit <- cumsum(testd$TermDepositAMT[s1$ix])
基本上计算测试数据帧中TermDeposit金额的累计和并将其存储在总存款中。这很好用。
然后我需要计算存款金额的平均值,我使用以下内容:
avgDeposit <- totalDeposit / (1:testd)
但收到错误消息
Error in 1:testd : NA/NaN argument
In addition: Warning message:
In 1:testd : numerical expression has 19 elements: only the first used
testd有8000个观察值和19个变量。
有人可以帮我解决这个问题吗?我试图在网上找到这个错误信息,但到目前为止我所知道的是1:testd基本上使R读取测试为一个它不是的数字,因此我得到一条错误信息。简单地采用mean(totalDeposit)就可以了吗?我试过了,但我得到的数字是荒谬的,没有代表平均值。
感谢您的帮助。
答案 0 :(得分:7)
在这种情况下,错误消息很有帮助。
当你说1:N
时,你告诉R的是&#34;给我1和N&#34;之间的整数序列。它是从integer1到integer2。 testd
不是整数,它是(最多)整数的整数向量,因此在计算序列时,R除了testd
中的第一个值之外的所有值。替代方案可能是一个可怕的错误或序列的集 - 一个介于1和testd
中的第一个值之间,另一个介于1和testd
中的第二个值之间。等等。
如果testd是数据框,则您需要的是1:nrow(testd)
,如果它是列表或向量,则为1:length(testd)
或seq_along(testd)
。
但基于这个问题 - 是否需要计算平均值? - 你实际上是在接近这个错误,因为你不想要一系列的价值观,你只需要一个:因为平均值=总数/进入总数的元素数量,你只需要&#39;元素的数量&#39; - 只需nrow(testd)
即可检索。
答案 1 :(得分:1)
很明显testd
是数据框或列表,因为您没有从testd$
收到错误。如果你有一个testd
,其中第一个元素是一个数字,但是它比一个元素长,你只会得到一个警告。你可能想写:
avgDeposit <- totalDeposit / 1:nrow(testd)
...虽然我承认这似乎没有用。至少它不会抛出错误。