I've got a dataset like the following.
df <- read.table(header=TRUE, text="
T_A_01_F_1 T_A_02_F_1 T_A_03_F_1 T_A_01_F_2 T_A_02_F_2 T_A_03_F_2 T_A_01_U_1 T_A_02_U_1 T_A_03_U_1 T_A_01_U_2 T_A_02_U_2 T_A_03_U_2 T_B_01_F_1 T_B_02_F_1 T_B_03_F_1 T_B_01_F_2 T_B_02_F_2 T_B_03_F_2 T_B_01_U_1 T_B_02_U_1 T_B_03_U_1 T_B_01_U_2 T_B_02_U_2 T_B_03_U_2
1 2 3 NA NA NA 2 2 2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2 2 5 NA NA NA 1 3 3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
5 3 3 NA NA NA 2 1 2 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2 4 5 NA NA NA 6 3 4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA 4 3 5 NA NA NA 4 3 2 NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA 4 4 5 NA NA NA 2 1 1 NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA 3 1 4 NA NA NA 2 1 7 NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA 2 1 6 NA NA NA 3 3 6 NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA 1 1 1 NA NA NA 2 3 1 NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA 2 1 1 NA NA NA 3 2 2 NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA 3 2 1 NA NA NA 4 2 1 NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA 2 5 4 NA NA NA 6 1 4 NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 3 2 2 NA NA NA 1 2 5
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 4 4 NA NA NA 3 3 5
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 4 4 NA NA NA 1 3 5
NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 1 3 NA NA NA 7 5 1
")
In this case its a 2x2x2 mixed design with "T" being the variable of interest with 3 items, "A" and "B" the between factor, "F" and "U" the within factor and "1" and "2" the between factor. I'd like to reduce the dataset, so that I can compute a cronbachs alpha.
As every Person either got A or B and either 1 or 2 I'd like to combine those items, so that I only have the items T_01_F, T_01_U, T_02_F, T_02_U, T_03_F, T_03_U
I could do this by hand, but does somebody know a quick command with which I could do that?
Thank you so much in advance!!
best, Nash
Perhaps a combination of pivot_longer() and separate() might work since all your column names appear to share the same structure.
library(tidyverse)
df<- df %>%
rownames_to_column() %>%
pivot_longer(cols = T_A_01_F_1:T_B_03_U_2) %>%
separate(col = name, sep = "_", into = c("t", "a_b", "number" , "within", "between"))
I have a data frame like this:
> head(mt)
FID IID PLATE 0VXC556 1CNF297 1CWO500 1DXJ626 1LTX827 1SHK635 1TNP840
1 fam0110 G110 4RWG569 NA NA NA NA NA NA NA
2 fam0113 G113 cherry NA NA NA NA NA NA NA
3 fam0114 G114 cherry NA NA NA NA NA NA NA
4 fam0117 G117 4RWG569 NA NA NA NA NA NA NA
5 fam0118 G118 5XAV049 NA NA NA NA NA NA NA
6 fam0119 G119 cherry NA NA NA NA NA NA NA
1URP242 2BKX529 2PAG415 3DEF425 3ECO791 3FQM386 3KYJ479 3XHK903 4RWG569
1 NA NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA NA
3 NA NA NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA NA NA
5AMJ101 5AVC089 5GBM583 5XAV049 5ZCV995 6KAE204 6PKP514 6WZD253 7FDZ321
1 NA NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA NA
3 NA NA NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA NA NA
7MFL836 7PNN733 7RUZ165 8WWR250 9GXO476 9QYW461 9RHL593 9TKZ501 cherry
1 NA NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA NA
3 NA NA NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA NA NA
...
how do I replace every NA i every column with 2 if the column name matches row value in mt$PLATE and with 1 if that is not true?
for example the first row of mt would only have mt$4RWG569==2 and every other column would be equal 1 in that row.
I tried doing this:
idxs <- t(mapply(cbind, match(colnames(mt), mt$PLATE)))
but then when I tried to this:
> mt[idxs] <- "2"
Error in `[<-.data.frame`(`*tmp*`, idxs, value = "2") :
unsupported matrix index in replacement
it seems that this line solves it:
for(i in 4:ncol(mt)) mt[,i] <- 1 + (names(mt)[i]== mt$PLATE)
I am trying to knit a codebook with R markdown and the package "codebook".
But when I click "knit" the following error occurs:
[...]
Could not summarize item pfbp. Error: Argument one must be a data frame or a named atomic vector.
[...]
I don't want to copy the whole code in here, but that's the summary of item pfbp:
> codebook_data$pfbp
<Labelled integer>: personal financial benefits decrease in productivity
[1] NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA NA
[29] NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5
[57] NA 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 NA NA NA 3 2 1 NA NA NA NA NA
[85] NA NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA 5 NA 4 1 NA NA NA NA NA NA NA
[113] NA NA NA NA NA NA 3 3 NA NA NA 5 NA NA NA NA NA NA NA 5 NA NA NA NA NA NA NA NA
[141] NA NA NA NA NA 5 NA NA 3 4 4 NA NA NA 5 5 NA NA NA 4 NA NA NA NA NA NA NA NA
[169] NA NA 4 NA NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[197] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 NA 3 NA 5 NA NA NA NA 5 4
[225] NA NA 1 NA NA 2 NA NA NA NA NA NA NA NA NA 5 NA NA NA NA 2 5 NA 5 NA NA NA NA
[253] NA NA NA NA NA NA NA 4 5 NA 3 NA NA NA NA NA NA NA NA NA NA NA NA NA 5 NA NA NA
[281] NA NA NA NA 5 NA NA NA 4 NA NA 1 4 NA NA NA NA NA 5 NA NA 5 NA NA NA NA NA NA
[309] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA
[337] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[365] NA NA 2 NA NA NA NA NA 3 NA NA NA NA NA 5 NA NA NA NA NA NA NA NA 2 NA NA NA 2
[393] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 4 NA 5 NA NA NA NA NA NA NA NA NA NA
[421] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA NA NA NA NA NA NA
[449] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 5 NA 4
[477] NA NA NA 4 NA NA NA NA NA NA NA NA NA 2 1 NA NA NA NA NA NA NA NA NA NA NA NA NA
[505] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[533] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 5 NA NA 4 NA NA NA NA NA NA NA 5
[561] NA 5 4 5
Labels:
value label
1 Trifft nicht zu
2 Trifft eher nicht zu
3 teils-teils
4 Trifft eher zu
5 Trifft zu
0 Weiß nicht
> summary(codebook_data$pfbp)
[0] Weiß nicht [1] Trifft nicht zu [2] Trifft eher nicht zu
1 5 8
[3] teils-teils [4] Trifft eher zu [5] Trifft zu
8 17 29
NA's
496
> class(codebook_data$pfbp)
[1] "haven_labelled"
I don't understand this error message. Do you have any ideas?
I have the following data :
as.integer(datIn$Measurement.location)
myfunctionSD <- function(mydata) { return(sd(mydata,na.rm=TRUE))}
Alltubes <- tapply(datIn$Material.loss.interval,list(as.factor(datIn$Measurement.location),as.factor(datIn$Tube.number)),myfunctionSD)
From this I get the following output table:
1 2 3 4 5 6
1 0.8710740 0.7269928 0.8151022 0.6397234 0.8670634 0.7042107
10 NA 0.8075675 NA NA NA NA
11 0.6977951 NA 1.0984465 1.1148588 1.2156506 0.9620030
12 NA 0.5986758 NA NA NA NA
13 0.8386249 NA 0.8398164 0.8833184 1.2469221 1.0070322
14 NA 0.5109903 NA NA NA NA
15 NA NA NA 0.9391486 1.3571094 0.8375686
16 NA 0.5761583 NA NA NA NA
17 NA NA NA NA 1.0100850 0.7171070
19 NA NA NA NA 0.5913518 NA
3 0.5580579 0.6106961 0.8971073 0.7046614 0.8456784 0.8001571
4 NA 0.7228325 NA NA NA NA
5 0.9318795 NA 0.8961706 0.7753733 0.5915633 1.0471933
6 NA 0.5968613 NA NA NA NA
7 0.7674944 NA 0.7196781 0.8543926 0.7778685 0.8697442
8 NA 0.6283008 NA NA NA NA
9 1.3687895 NA 0.8815196 1.1723445 1.1589998 0.8194962
How do I rearrange the row numbers in the correct numeric order, so from 1 to 19 so I can plot it correctly?
Hope someone can help me.
Something like this...
> Alltubes[sort(as.numeric(rownames(Alltubes))), ]
df2 is your data frame
df2[order(as.numeric(rownames(df2))),]
X1 X2 X3 X4 X5 X6
1 0.8710740 0.7269928 0.8151022 0.6397234 0.8670634 0.7042107
3 0.5580579 0.6106961 0.8971073 0.7046614 0.8456784 0.8001571
4 NA 0.7228325 NA NA NA NA
5 0.9318795 NA 0.8961706 0.7753733 0.5915633 1.0471933
6 NA 0.5968613 NA NA NA NA
7 0.7674944 NA 0.7196781 0.8543926 0.7778685 0.8697442
8 NA 0.6283008 NA NA NA NA
9 1.3687895 NA 0.8815196 1.1723445 1.1589998 0.8194962
10 NA 0.8075675 NA NA NA NA
11 0.6977951 NA 1.0984465 1.1148588 1.2156506 0.9620030
12 NA 0.5986758 NA NA NA NA
13 0.8386249 NA 0.8398164 0.8833184 1.2469221 1.0070322
14 NA 0.5109903 NA NA NA NA
15 NA NA NA 0.9391486 1.3571094 0.8375686
16 NA 0.5761583 NA NA NA NA
17 NA NA NA NA 1.0100850 0.7171070
19 NA NA NA NA 0.5913518 NA
I am trying to reshape this dataframe:
ID tag stemID spcode x y blk plotnum trt date1 dbh1 hom1 codes1 height1 canpos1 liana1 obs1 date2 dbh2 hom2 codes2 height2 canpos2 liana2 obs2 date3 dbh3 hom3 codes3 height3 canpos3 liana3 obs3 date4 dbh4 hom4 codes4 height4 canpos4 liana4 obs4 date5 dbh5 hom5 codes5 height5 canpos5 liana5 obs5 date6 dbh6 hom6 codes6 height6 canpos6 liana6 obs6 date7 dbh7 hom7 codes7 height7 canpos7 liana7 obs7 date8 dbh8 hom8 codes8 height8 canpos8 liana8 obs8 date9 dbh9 hom9 codes9 height9 canpos9 liana9 obs9
1 1 511141 acapol 21 470 NA 1 CL 1/1/1993 NA NA NA NA NA NA NA 1/1/1994 NA NA NA NA NA NA NA 1/1/1995 NA NA NA NA NA NA NA 1/1/1996 NA NA NA NA NA NA NA 1/1/1998 NA NA NA NA NA NA NA 1/1/2000 NA NA NA NA NA NA NA 1/1/2003 NA NA NA NA NA NA NA 1/1/2006 20.10000 NA NA NA NA NA NA 1/1/2009 24.20 NA NA NA NA 1 NA
2 2 1406 SUB acapol 1 153 NA 14 CONTROL 1/1/1993 40.7 NA NA NA NA 2 NA 1/1/1994 41.30000 NA NA NA NA NA NA 1/1/1995 NA NA NA NA NA NA NA 1/1/1996 NA NA NA NA NA NA NA 1/1/1998 NA NA NA NA NA NA NA 1/1/2000 NA NA NA NA NA NA NA 1/1/2003 NA NA NA NA NA NA NA 1/1/2006 NA NA NA NA NA NA NA 1/1/2009 NA NA NA NA NA NA
3 3 726 acapol 23 127 NA 10 RIL 1/1/1993 67.0 NA NA NA NA 3 NA 1/1/1994 NA NA NA NA NA NA NA 1/1/1995 NA NA NA NA NA NA NA 1/1/1996 NA NA NA NA NA NA NA 1/1/1998 NA NA NA NA NA NA NA 1/1/2000 NA NA NA NA NA NA NA 1/1/2003 NA NA NA NA NA NA NA 1/1/2006 NA NA NA NA NA NA NA 1/1/2009 NA NA NA NA NA NA
4 4 51664 aconit 22 102 NA 18 CONTROL 1/1/1993 NA NA NA NA NA NA NA 1/1/1994 NA NA NA NA NA NA NA 1/1/1995 NA NA NA NA NA NA NA 1/1/1996 NA NA NA NA NA NA NA 1/1/1998 NA NA NA NA NA NA NA 1/1/2000 NA NA NA NA NA NA NA 1/1/2003 NA NA NA NA NA NA NA 1/1/2006 10.40000 NA NA NA NA NA NA 1/1/2009 10.70 NA NA NA NA NA
5 5 5198 aconit 24 67 NA 3 CONTROL 1/1/1993 NA NA NA NA NA NA NA 1/1/1994 NA NA NA NA NA NA NA 1/1/1995 NA NA NA NA NA NA NA 1/1/1996 NA NA NA NA NA NA NA 1/1/1998 NA NA NA NA NA NA NA 1/1/2000 NA NA NA NA NA NA NA 1/1/2003 NA NA NA NA NA NA NA 1/1/2006 10.50000 NA NA NA NA NA NA 1/1/2009 10.70 NA NA NA NA NA
Editors note: This appears to have been tab separated data but the tabs were converted to spaces and it may be difficult to import. The poster should have posted output from dput(census).
I have used this code several times, but now it is giving me a error and, although it should be a really basic thing, I can't figure it out what is missing:
census.long.coarse =
reshape(census,
varying=list(c("date1","date2","date3","date4","date5","date6","date7","date8","data9"),
c("dbh1","dbh2","dbh3","dbh4","dbh5","dbh6","dbh7","dbh8","dbh9")),
v.names = c("date","dbh"),
direction = "long",
times = c(1,2,3,4,5,6,7,8,9))
The error that I am getting is:
Error in `[.data.frame`(data, , varying[[j]][i]) :
undefined columns selected
You made a typo (data9 instead of date9). Should work:
census.long.coarse = reshape(census,
varying=list(c("date1","date2","date3","date4","date5","date6","date7","date8","date9"),
c("dbh1","dbh2","dbh3","dbh4","dbh5","dbh6","dbh7","dbh8","dbh9")),
v.names = c("date","dbh"),
direction = "long",
times = c(1,2,3,4,5,6,7,8,9))