[R] Fill NA values in columns with values of another column

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Thu Aug 29 23:58:36 CEST 2024


Use the ave function.

On August 29, 2024 2:29:16 PM PDT, Bert Gunter <bgunter.4567 using gmail.com> wrote:
>Petr et.al:
>
>I think using merge is a very nice idea! (note that the email omitted the
>last rows of the result, though your code of course produced them)
>
>The only minor problem is that the order of the rows in the result is
>changed from the original. If the OP needs to preserve the original
>ordering, that can be easily done. Here is a complete implementation of
>your idea (I think).
>
>## assume that dat is a data frame with the first two columns as in the
>OP's post, i.e. the first column is the Value with NA's and the second is
>the Group
>
> spl <-  dat |> nrow() |> seq_len() |> split(dat[[2]]) |> unlist() ## for
>reordering
> dat[spl, 1:2] <-
>    dat[, 1:2] |>
>    na.omit() |>  ## remove rows with NA's
>    unique() |>  ## remove duplicate rows
>    merge(dat[, 1:2], by.x=2, by.y=2) |> _[, 2:1]  ## and now merge()
>
> Note the final reordering of the first two columns because of the way
>merge() works.
>I suspect there may be a slicker way to do this using unsplit(), but I
>could not figure out how
>
>The result is:
>> dat
>   Value Group
>1      6     8
>2      9     5
>3      2     1
>4      5     6
>5      2     7
>6      7     2
>7      4     4
>8      2     7
>9      2     7
>10    10     3
>11     7     2
>12     4     4
>13     5     6
>14     9     5
>15     9     5
>16     5     6
>17    10     3
>18     7     2
>19     2     1
>20     2     7
>21     7     2
>22     6     8
>23     4     4
>24     9     5
>25     5     6
>26     2     1
>27     4     4
>28     6     8
>29    10     3
>30    10     3
>31     6     8
>32     2     1
>
>Cheers,
>Bert
>
>
>
>
>On Wed, Aug 28, 2024 at 10:53 PM Petr Pikal <petr.pik using gmail.com> wrote:
>
>> Hallo Francesca
>>
>> If you had an object with correct setting, something like template
>>
>> > dput(res)
>> structure(list(V1 = c("1", "2", "3", "4", "5", "6", "7", "8"),
>>     V2 = c(2, 7, 10, 4, 9, 5, 2, 6)), class = "data.frame", row.names =
>> c("1",
>> "2", "3", "4", "5", "6", "7", "8"))
>>
>> you could merge it with your object where some values are missing
>>
>> > dput(daf)
>> structure(list(X1 = c(6L, 9L, NA, 5L, NA, NA, 4L, 2L, 2L, NA,
>> NA, NA, 5L, 9L, NA, NA, 10L, 7L, 2L, NA, 7L, NA, NA, NA, NA,
>> 2L, 4L, 6L, 10L, NA, NA, NA), X2 = c(8L, 5L, 1L, 6L, 7L, 2L,
>> 4L, 7L, 7L, 3L, 2L, 4L, 6L, 5L, 5L, 6L, 3L, 2L, 1L, 7L, 2L, 8L,
>> 4L, 5L, 6L, 1L, 4L, 8L, 3L, 3L, 8L, 1L)), class = "data.frame", row.names =
>> c(NA,
>> -32L))
>>
>> > merge(daf, res, by.x="X2", by.y="V1")
>>    X2 X1 V2
>> 1   1 NA  2
>> 2   1 NA  2
>> 3   1  2  2
>> 4   1  2  2
>> 5   2 NA  7
>> 6   2 NA  7
>> 7   2  7  7
>> 8   2  7  7
>> 9   3 10 10
>> 10  3 NA 10
>> 11  3 10 10
>> 12  3 NA 10
>> 13  4  4  4
>> 14  4 NA  4
>> 15  4  4  4
>> 16  4 NA  4
>> 17  5  9  9
>> 18  5 NA  9
>> 19  5 NA  9
>>
>> Cheers.
>> Petr
>>
>>
>>
>>
>> st 28. 8. 2024 v 0:45 odesílatel Francesca PANCOTTO via R-help <
>> r-help using r-project.org> napsal:
>>
>> > Dear Contributors,
>> > I have a problem with a database composed of many individuals for many
>> > periods, for which I need to perform a manipulation of data as follows.
>> > Here I report the procedure I need to do for the first 32 observations of
>> > the first period.
>> >
>> >
>> > cbind(VB1d[,1],s1id[,1])
>> >       [,1] [,2]
>> >  [1,]    6    8
>> >  [2,]    9    5
>> >  [3,]   NA    1
>> >  [4,]    5    6
>> >  [5,]   NA    7
>> >  [6,]   NA    2
>> >  [7,]    4    4
>> >  [8,]    2    7
>> >  [9,]    2    7
>> > [10,]   NA    3
>> > [11,]   NA    2
>> > [12,]   NA    4
>> > [13,]    5    6
>> > [14,]    9    5
>> > [15,]   NA    5
>> > [16,]   NA    6
>> > [17,]   10    3
>> > [18,]    7    2
>> > [19,]    2    1
>> > [20,]   NA    7
>> > [21,]    7    2
>> > [22,]   NA    8
>> > [23,]   NA    4
>> > [24,]   NA    5
>> > [25,]   NA    6
>> > [26,]    2    1
>> > [27,]    4    4
>> > [28,]    6    8
>> > [29,]   10    3
>> > [30,]   NA    3
>> > [31,]   NA    8
>> > [32,]   NA    1
>> >
>> >
>> > In column s1id, I have numbers from 1 to 8, which are the id of 8 groups
>> ,
>> > randomly mixed in the larger group of 32.
>> > For each group, I want the value that is reported for only to group
>> > members, to all the four group members.
>> >
>> > For example, value 8 in first row , second column, is group 8. The value
>> > for group 8 of the variable VB1d is 6. At row 28, again for s1id equal to
>> > 8, I have 6.
>> > But in row 22, the value 8 of the second variable, reports a value NA.
>> > in each group is the same, only two values have the correct number, the
>> > other two are NA.
>> > I need that each group, identified by the values of the variable S1id,
>> > correctly report the number of variable VB1d that is present for just two
>> > group members.
>> >
>> > I hope my explanation is acceptable.
>> > The task appears complex to me right now, especially because I will need
>> to
>> > multiply this procedure for x12x14 similar databases.
>> >
>> > Anyone has ever encountered a similar problem?
>> > Thanks in advance for any help provided.
>> >
>> > ----------------------------------
>> >
>> > Francesca Pancotto
>> >
>> > Associate Professor Political Economy
>> >
>> > University of Modena, Largo Santa Eufemia, 19, Modena
>> >
>> > Office Phone: +39 0522 523264
>> >
>> > Web: *https://sites.google.com/view/francescapancotto/home
>> > <https://sites.google.com/view/francescapancotto/home>*
>> >
>> >  ----------------------------------
>> >
>> >         [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> > https://stat.ethz.ch/mailman/listinfo/r-help
>> > PLEASE do read the posting guide
>> > https://www.R-project.org/posting-guide.html
>> > and provide commented, minimal, self-contained, reproducible code.
>> >
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> https://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>	[[alternative HTML version deleted]]
>
>______________________________________________
>R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

-- 
Sent from my phone. Please excuse my brevity.



More information about the R-help mailing list