我有一个R问题困扰了我一段时间。我有一个dataframe(df),它包含变量A和B,它们都是数字(正数)。R,用不同格式的df中的变量?
Assumptions:
- A and B can be equal
- A can be 0
- B can be 0
然后我执行以下计算:
df$C <- ((df$A/(df$B - df$A)) -1) * 100
结果(DF $ C)是一个数值矢量,这使得所有感测我想。虽然我注意到在df $ C之内,有些变量是数值的(一个例子是5),其他的(包含“。”的例如1.5)被解释为分类。
实际例子(让假设A具有在其所有长度上具有相同的值这同样适用于变量B):
df$A <- 3
df$B <- 2
从而:
ID A B C
1 3 2 400
2 2 2 Inf
3 4 2 -300
4 10 1.5 -217.6471
然后我子集中的数据像这样:
subset(df, df$C == X)
其中X显然是一个值。虽然,我发现如果X == 400那么它工作,否则,如果X == -217.6471它不起作用。相反,我需要使用X ==“-217.6471”,(如果我错了,就纠正我)意味着变量是分类的。或换句话说:
ID A B C
1 3 2 num
2 2 2 Cat
3 4 2 num
4 10 1.5 Cat
这怎么可能?
不过,我还有一个问题。当A和B相等时,显然我得到了“Inf”,“-Inf”和其他一些随机值(我认为它是垃圾)。
有人可以请解释我最近怎么了?
在此先感谢
此问题不明确,因为它是。如果你有一个data.frame对象,每一列可以是一个类型,即数字或字符(分类)。在你的例子的B列中,'1,5'是字符,但是这会导致错误,而不是C列中的结果。这使我认为它是全部数字。比较数字时,应使用“相同”或“all.equal”。如果A和B相等,你除以0,这就是为什么你得到Inf或-Inf。 – LyzandeR
如果您尝试'1 ==“1”',您将得到'TRUE',因为数字'1'首先转换为字符'“1”',然后进行比较,类似地,当数字和字符串联时,数字变为成为一个角色 –
Hi @LyzandeR,对不起,它是1.5而不是1,5。你说的对,据说df的所有列都有相同的格式,事实上情况就是这样。 A和B都是数字。 C也是如此。我用我给出的例子来说明真实场景可以呈现的多样性,是的,一旦我将A除以0,我应该得到Inf或-Inf,这对某些值是正确的。尽管有时它给了我一个巨大的价值(与Inf的Infin不同)。我不能在这里完全表示它,因为我的数据集有一些千兆字节和大约10万行的真实客户数据。虽然我对这个 –