数据集包含三个变量:id,sex和grade(factor).
mydata <- data.frame(id=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4), sex=c(1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1),
grade=c("a","b","c","d","e", "x","y","y","x", "q","q","q","q", "a", "a", "a", NA, "b"))
Run Code Online (Sandbox Code Playgroud)
对于每个ID,我需要查看我们有多少个唯一等级,然后创建一个新列(调用N)来记录等级频率.例如,对于ID = 1,我们有五个"等级"的唯一值,因此N = 4; 对于ID = 2,我们有两个"等级"的唯一值,所以N = 2; 对于ID = 4,我们有两个"等级"的唯一值(忽略NA),因此N = 2.
最终的数据集是
mydata <- data.frame(id=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4), sex=c(1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1),
grade=c("a","b","c","d","e", "x","y","y","x", "q","q","q","q", "a", "a", "a", NA, "b"))
mydata$N <- c(5,5,5,5,5,2,2,2,2,1,1,1,1,2,2,2,2,2)
Run Code Online (Sandbox Code Playgroud) 假设我的数据集包含三列:id(标识),case(字符)和value(numeric).这是我的数据集:
tdata <- data.frame(id=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), case=c("a","b","c","c","a","b","c","c","a","b","c","c","a","b","c","c"), value=c(1,34,56,23,546,34,67,23,65,23,65,23,87,34,321,56))
tdata
id case value
1 1 a 1
2 1 b 34
3 1 c 56
4 1 c 23
5 2 a 546
6 2 b 34
7 2 c 67
8 2 c 23
9 3 a 65
10 3 b 23
11 3 c 65
12 3 c 23
13 4 a 87
14 4 b 34
15 4 c 321
16 4 c 56
Run Code Online (Sandbox Code Playgroud)
如果您注意到,对于每个ID,我们有两个c.如何将它们重命名为c1和c2?(我需要区分它们以便进一步分析).
数据框包含两个变量 ( timeand rate) 和 10 个观测值
time <- seq(1:10)
rate <- 1-(0.99^time)
dat <- data.frame(time, rate)
Run Code Online (Sandbox Code Playgroud)
我需要添加一个新列(称为new_rate)。
new_rate 定义如下
注意:new_rate_1是new列new_rate等的第一次观察。
new_rate_1 = rate_1
new_rate_2 = (1-rate_1)*rate_2
new_rate_3 = (1-rate_1)*(1-rate_2)*rate_3
new_rate_4 = (1-rate_1)*(1-rate_2)*(1-rate_3)*rate_4
...
new_rate_10 = (1-rate_1)*(1-rate_2)*(1-rate_3)*(1-rate_4)*(1-rate_5)*(1-rate_6)*(1-rate_7)*(1-rate_8)*(1-rate_9)*rate_10
Run Code Online (Sandbox Code Playgroud)
如何在基础 R或dplyr?
假设我们有20个科目,每个科目我们有四个变量:X1,X2,X3和X4.我想计算每个主题的平均值,但问题是每当缺少值时,SAS都不会给出平均值.如何在调整n时进行此操作(如果没有缺失值,n = 4,如果有一个缺失值,则n = 3,等等)谢谢.
我的数据集包含四个数值变量X1,X2,X3,X_4和一个ID列.
ID <- c(1,2,3,4,5,6,7,8,9,10)
X1 <- c(3,1,1,1,2,1,2,1,3,4)
X2 <- c(1,2,1,3,2,2,4,1,2,4)
X3 <- c(1,1,1,3,2,3,3,2,1,4)
X4 <- c(1,4,1,1,1,4,3,1,4,4)
Mydata <- data.frame(ID, X1,X2,X3,X4)
Run Code Online (Sandbox Code Playgroud)
我需要再创建两列:1)Max,和2)Var
1)最大列:对于每个只有一个最大值的行,我需要在Max变量中保存这个"max"值.如果行有多个,则Max值应为999.
2)Var列:对于只有一个最大值的行,我需要知道它是X1,X2,X3 $还是X4.
对于上面的数据集,这是输出:
ID X1 X2 X3 X4 Max Var
1 3 1 1 1 3 X1
2 1 2 1 4 4 X4
3 1 1 1 1 999 NA
4 1 3 3 1 999 NA
5 2 2 2 1 999 NA
6 1 2 3 4 4 X4
7 2 4 3 3 4 …Run Code Online (Sandbox Code Playgroud) 我的数据集包含6个字段和4个具有一些NA值的行.
a=c(5,6,7,12)
b=c(7,2,3,4)
c=c(8,8,21)
d=c(1,1)
e=c(1,2,5,9)
f=c(20,3,11)
length(c)=4
length(d)=4
length(f)=4
z=data.frame(a,b,c,d,e,f)
a b c d e f
5 7 8 1 1 20
6 2 8 1 2 3
7 3 21 NA 5 11
12 4 NA NA 9 NA
Run Code Online (Sandbox Code Playgroud)
这是我需要做的:对于字段a,c,d和f,如果值小于6或大于12,那么我需要将其设置为NA.此外,如果该值是alread NA则没有变化(保持NA).
我可以使用ifelse为每个字段做到这一点,但我的数据包含数十个字段,所以我想知道是否有一种有效的方法来做到这一点.
最终的数据是
a b c d e f
NA 7 8 NA 1 NA
6 2 8 NA 2 NA
7 3 NA NA 5 11
12 4 NA NA 9 NA
Run Code Online (Sandbox Code Playgroud) 假设我的数据框(mydata)中有三个变量:1)id,2)case和3)value.
mydata <- data.frame(id=c(1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), case=c("a","b","c","c","b","a","b","c","c","a","b","c","c","a","b","c","a"), value=c(1,34,56,23,34,546,34,67,23,65,23,65,23,87,34,321,87))
mydata
id case value
1 1 a 1
2 1 b 34
3 1 c 56
4 1 c 23
5 1 b 34
6 2 a 546
7 2 b 34
8 2 c 67
9 2 c 23
10 3 a 65
11 3 b 23
12 3 c 65
13 3 c 23
14 4 a 87
15 4 b 34
16 4 c 321
17 4 a 87
Run Code Online (Sandbox Code Playgroud)
对于每个id,我们可以有类似的"case"字符,它们的值可以相同或不同.所以基本上,如果它们的值相同,我只需要保留一个并删除副本.
那么我的最终数据将是 …
数据包含两个变量:id和grade.每个ID可以为每个等级创建多个记录.
dat <- data.frame(id = c(1,1,1,2,2,2,2,3,3,4,5,5,5),
grade = c("a", "b", "c", "a", "a", "b", "b", "d", "f", "c", "a", "e", "f"))
Run Code Online (Sandbox Code Playgroud)
我想将数据重新整形为一个宽大的形状,这样每个id只有一个记录,每个唯一等级变成一个列.每列的值为0或1,具体取决于每个id的等级.
最终的数据集如下:
id a b c d e f
1 1 1 1 0 0 0
2 1 1 0 0 0 0
3 0 0 0 1 0 1
4 0 0 1 0 0 0
5 1 0 0 0 1 1
Run Code Online (Sandbox Code Playgroud)
我试过这个,但没有运气.
n.dat <- reshape(dat, timevar = "grade",idvar = c("id"),direction = "wide")
Run Code Online (Sandbox Code Playgroud) 我的数据包含三个变量,其中包含三个唯一ID,每个变量都有多个记录.见下文
ID <- c(rep(1,7), rep(2,6), rep(3,5), rep(4,6))
t <- c(seq(1,7), seq(1,6), seq(1,5), rep(2,6))
y <- c(rep(6,7), rep(1,6), rep(6,5), rep(0.2,6))
z <- c(5,0,0,0,1,0,0,0,0,-1,0,0,0,4,2,NaN,0,1,0,0,1,Inf,Inf, Inf)
dat1 <- data.frame(ID, t, y, z)
Run Code Online (Sandbox Code Playgroud)
对于每个ID,如果z的值低于0(负),NaN,Inf或-Inf,我需要排除该记录及其下面的所有记录.
对于此数据,新处理的数据如下所示:
ID <- c(rep(1,7), rep(2,2), rep(3,2), rep(4,3))
t <- c(seq(1,7), seq(1,2), seq(1,2), rep(2,3))
y <- c(rep(6,7), rep(1,2), rep(6,2), rep(0.2,3))
z <- c(5,0,0,0,1,0,0,0,0,4,2,0,0,1)
dat2 <- data.frame(ID, t, y, z)
Run Code Online (Sandbox Code Playgroud) 我的数据集包含三个变量:
id <- c(1,1,1,1,1,1,2,2,2,2,5,5,5,5,5,5)
ind <- c(0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1)
price <- c(1,2,3,4,5,6,1,2,3,4,1,2,3,4,5,6)
mdata <- data.frame(id,ind,price)
Run Code Online (Sandbox Code Playgroud)
我需要创建一个新变量(ind2),如果ind = 0,则ind2 = 0.另外,如果ind = 1,则ind2 = 0,除非价格值为max,则ind2 = 1.
新数据如下:
id ind ind2 price
1 0 0 1
1 0 0 2
1 0 0 3
1 0 0 4
1 0 0 5
1 0 0 6
2 1 0 1
2 1 0 2
2 1 0 3
2 1 1 4
5 1 0 1
5 1 0 2
5 1 0 …Run Code Online (Sandbox Code Playgroud)